@nypl/design-system-react-components 0.25.13 → 0.26.0

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 (299) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +10 -10
  3. package/dist/components/Accordion/Accordion.d.ts +1 -1
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  5. package/dist/components/Button/Button.d.ts +2 -2
  6. package/dist/components/Card/Card.d.ts +11 -9
  7. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +5 -4
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
  10. package/dist/components/DatePicker/DatePicker.d.ts +5 -6
  11. package/dist/components/Fieldset/Fieldset.d.ts +5 -6
  12. package/dist/components/Form/Form.d.ts +6 -6
  13. package/dist/components/Grid/GridTypes.d.ts +7 -7
  14. package/dist/components/Grid/SimpleGrid.d.ts +1 -1
  15. package/dist/components/Heading/Heading.d.ts +1 -1
  16. package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
  17. package/dist/components/Hero/Hero.d.ts +2 -1
  18. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
  19. package/dist/components/Icons/Icon.d.ts +2 -1
  20. package/dist/components/Image/Image.d.ts +2 -2
  21. package/dist/components/Label/Label.d.ts +7 -4
  22. package/dist/components/Link/Link.d.ts +1 -1
  23. package/dist/components/List/List.d.ts +11 -11
  24. package/dist/components/List/ListTypes.d.ts +1 -1
  25. package/dist/components/Logo/Logo.d.ts +2 -1
  26. package/dist/components/Logo/LogoSvgs.d.ts +2 -0
  27. package/dist/components/Logo/LogoTypes.d.ts +2 -0
  28. package/dist/components/Notification/Notification.d.ts +4 -4
  29. package/dist/components/Pagination/Pagination.d.ts +2 -2
  30. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
  31. package/dist/components/Radio/Radio.d.ts +4 -6
  32. package/dist/components/RadioGroup/RadioGroup.d.ts +12 -6
  33. package/dist/components/SearchBar/SearchBar.d.ts +4 -4
  34. package/dist/components/Select/Select.d.ts +10 -6
  35. package/dist/components/Select/SelectTypes.d.ts +4 -0
  36. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +4 -3
  37. package/dist/components/Slider/Slider.d.ts +6 -4
  38. package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
  39. package/dist/components/StructuredContent/StructuredContent.d.ts +2 -2
  40. package/dist/components/Table/Table.d.ts +1 -1
  41. package/dist/components/Tabs/Tabs.d.ts +4 -3
  42. package/dist/components/Template/Template.d.ts +4 -3
  43. package/dist/components/Text/Text.d.ts +1 -1
  44. package/dist/components/TextInput/TextInput.d.ts +5 -5
  45. package/dist/components/Toggle/Toggle.d.ts +3 -4
  46. package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
  47. package/dist/design-system-react-components.cjs.development.js +1663 -1139
  48. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  49. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  50. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  51. package/dist/design-system-react-components.esm.js +1667 -1143
  52. package/dist/design-system-react-components.esm.js.map +1 -1
  53. package/dist/hooks/useCarouselStyles.d.ts +3 -2
  54. package/dist/hooks/useNYPLTheme.d.ts +12 -0
  55. package/dist/index.d.ts +4 -1
  56. package/dist/styles.css +1 -1
  57. package/dist/theme/components/button.d.ts +10 -2
  58. package/dist/theme/components/card.d.ts +42 -22
  59. package/dist/theme/components/checkbox.d.ts +5 -4
  60. package/dist/theme/components/checkboxGroup.d.ts +1 -1
  61. package/dist/theme/components/componentWrapper.d.ts +2 -2
  62. package/dist/theme/components/customTable.d.ts +84 -1
  63. package/dist/theme/components/fieldset.d.ts +4 -14
  64. package/dist/theme/components/global.d.ts +23 -17
  65. package/dist/theme/components/heading.d.ts +53 -0
  66. package/dist/theme/components/helperErrorText.d.ts +1 -0
  67. package/dist/theme/components/hero.d.ts +20 -14
  68. package/dist/theme/components/label.d.ts +9 -10
  69. package/dist/theme/components/list.d.ts +99 -9
  70. package/dist/theme/components/radio.d.ts +6 -4
  71. package/dist/theme/components/radioGroup.d.ts +1 -1
  72. package/dist/theme/components/select.d.ts +34 -5
  73. package/dist/theme/components/skeletonLoader.d.ts +2 -2
  74. package/dist/theme/components/slider.d.ts +6 -3
  75. package/dist/theme/components/structuredContent.d.ts +197 -0
  76. package/dist/theme/components/textInput.d.ts +18 -6
  77. package/dist/theme/components/toggle.d.ts +7 -4
  78. package/dist/theme/foundations/global.d.ts +2 -0
  79. package/dist/theme/foundations/radii.d.ts +1 -0
  80. package/dist/theme/foundations/spacing.d.ts +46 -43
  81. package/package.json +5 -6
  82. package/src/components/Accordion/Accordion.stories.mdx +9 -9
  83. package/src/components/Accordion/Accordion.test.tsx +21 -0
  84. package/src/components/Accordion/Accordion.tsx +13 -9
  85. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +276 -27
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  87. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +21 -5
  88. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +52 -31
  89. package/src/components/Breadcrumbs/Breadcrumbs.tsx +8 -7
  90. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
  91. package/src/components/Button/Button.stories.mdx +87 -23
  92. package/src/components/Button/Button.test.tsx +25 -0
  93. package/src/components/Button/Button.tsx +18 -7
  94. package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
  95. package/src/components/Card/Card.stories.mdx +287 -194
  96. package/src/components/Card/Card.test.tsx +102 -0
  97. package/src/components/Card/Card.tsx +73 -32
  98. package/src/components/Card/__snapshots__/Card.test.tsx.snap +195 -35
  99. package/src/components/Chakra/Grid.stories.mdx +4 -4
  100. package/src/components/Checkbox/Checkbox.stories.mdx +62 -10
  101. package/src/components/Checkbox/Checkbox.test.tsx +32 -9
  102. package/src/components/Checkbox/Checkbox.tsx +20 -15
  103. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +134 -7
  104. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +65 -17
  105. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +137 -81
  106. package/src/components/CheckboxGroup/CheckboxGroup.tsx +31 -21
  107. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +332 -97
  108. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
  109. package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
  110. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
  111. package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
  112. package/src/components/DatePicker/DatePicker.test.tsx +89 -13
  113. package/src/components/DatePicker/DatePicker.tsx +62 -56
  114. package/src/components/DatePicker/_DatePicker.scss +71 -13
  115. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
  116. package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
  117. package/src/components/Fieldset/Fieldset.test.tsx +58 -28
  118. package/src/components/Fieldset/Fieldset.tsx +35 -30
  119. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
  120. package/src/components/Form/Form.stories.mdx +72 -39
  121. package/src/components/Form/Form.test.tsx +58 -15
  122. package/src/components/Form/Form.tsx +89 -67
  123. package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
  124. package/src/components/Grid/GridTypes.tsx +7 -7
  125. package/src/components/Grid/SimpleGrid.stories.mdx +34 -6
  126. package/src/components/Grid/SimpleGrid.test.tsx +9 -0
  127. package/src/components/Grid/SimpleGrid.tsx +29 -20
  128. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
  129. package/src/components/Heading/Heading.stories.mdx +36 -3
  130. package/src/components/Heading/Heading.test.tsx +10 -0
  131. package/src/components/Heading/Heading.tsx +56 -50
  132. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +26 -7
  133. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
  134. package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
  135. package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
  136. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
  137. package/src/components/Hero/Hero.stories.mdx +125 -95
  138. package/src/components/Hero/Hero.test.tsx +33 -0
  139. package/src/components/Hero/Hero.tsx +135 -126
  140. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
  141. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
  142. package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -19
  143. package/src/components/HorizontalRule/HorizontalRule.tsx +9 -26
  144. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
  145. package/src/components/Icons/Icon.stories.mdx +31 -6
  146. package/src/components/Icons/Icon.test.tsx +38 -0
  147. package/src/components/Icons/Icon.tsx +93 -76
  148. package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
  149. package/src/components/Image/Image.stories.mdx +29 -5
  150. package/src/components/Image/Image.test.tsx +8 -0
  151. package/src/components/Image/Image.tsx +38 -26
  152. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  153. package/src/components/Label/Label.stories.mdx +42 -20
  154. package/src/components/Label/Label.test.tsx +42 -17
  155. package/src/components/Label/Label.tsx +22 -13
  156. package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
  157. package/src/components/Link/Link.stories.mdx +25 -1
  158. package/src/components/Link/Link.test.tsx +21 -0
  159. package/src/components/Link/Link.tsx +8 -8
  160. package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
  161. package/src/components/List/List.stories.mdx +75 -40
  162. package/src/components/List/List.test.tsx +67 -19
  163. package/src/components/List/List.tsx +38 -25
  164. package/src/components/List/ListTypes.tsx +1 -1
  165. package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
  166. package/src/components/Logo/Logo.stories.mdx +30 -6
  167. package/src/components/Logo/Logo.test.tsx +17 -0
  168. package/src/components/Logo/Logo.tsx +18 -6
  169. package/src/components/Logo/LogoSvgs.tsx +4 -0
  170. package/src/components/Logo/LogoTypes.tsx +2 -0
  171. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
  172. package/src/components/Modal/Modal.stories.mdx +13 -0
  173. package/src/components/Notification/Notification.stories.mdx +25 -1
  174. package/src/components/Notification/Notification.test.tsx +23 -0
  175. package/src/components/Notification/Notification.tsx +46 -44
  176. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
  177. package/src/components/Pagination/Pagination.stories.mdx +24 -4
  178. package/src/components/Pagination/Pagination.test.tsx +25 -0
  179. package/src/components/Pagination/Pagination.tsx +6 -6
  180. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
  181. package/src/components/Placeholder/Placeholder.tsx +3 -1
  182. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
  183. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +81 -11
  184. package/src/components/ProgressIndicator/ProgressIndicator.tsx +17 -9
  185. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
  186. package/src/components/Radio/Radio.stories.mdx +64 -12
  187. package/src/components/Radio/Radio.test.tsx +28 -8
  188. package/src/components/Radio/Radio.tsx +66 -63
  189. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +103 -6
  190. package/src/components/RadioGroup/RadioGroup.stories.mdx +224 -89
  191. package/src/components/RadioGroup/RadioGroup.test.tsx +122 -62
  192. package/src/components/RadioGroup/RadioGroup.tsx +106 -100
  193. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1236 -1020
  194. package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
  195. package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
  196. package/src/components/SearchBar/SearchBar.tsx +17 -8
  197. package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
  198. package/src/components/Select/Select.stories.mdx +128 -49
  199. package/src/components/Select/Select.test.tsx +63 -16
  200. package/src/components/Select/Select.tsx +125 -92
  201. package/src/components/Select/SelectTypes.tsx +5 -0
  202. package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
  203. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +42 -10
  204. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +8 -0
  205. package/src/components/SkeletonLoader/SkeletonLoader.tsx +76 -72
  206. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
  207. package/src/components/Slider/Slider.stories.mdx +91 -42
  208. package/src/components/Slider/Slider.test.tsx +65 -17
  209. package/src/components/Slider/Slider.tsx +26 -19
  210. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
  211. package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
  212. package/src/components/StatusBadge/StatusBadge.test.tsx +16 -0
  213. package/src/components/StatusBadge/StatusBadge.tsx +25 -20
  214. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
  215. package/src/components/StructuredContent/StructuredContent.stories.mdx +131 -12
  216. package/src/components/StructuredContent/StructuredContent.test.tsx +34 -0
  217. package/src/components/StructuredContent/StructuredContent.tsx +80 -75
  218. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
  219. package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
  220. package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
  221. package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
  222. package/src/components/StyleGuide/ColorCard.tsx +1 -1
  223. package/src/components/StyleGuide/Colors.stories.mdx +1 -2
  224. package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
  225. package/src/components/StyleGuide/Forms.stories.mdx +27 -12
  226. package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
  227. package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
  228. package/src/components/StyleGuide/Typography.stories.mdx +30 -21
  229. package/src/components/Table/Table.stories.mdx +38 -11
  230. package/src/components/Table/Table.test.tsx +15 -0
  231. package/src/components/Table/Table.tsx +7 -7
  232. package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
  233. package/src/components/Tabs/Tabs.stories.mdx +52 -3
  234. package/src/components/Tabs/Tabs.test.tsx +16 -0
  235. package/src/components/Tabs/Tabs.tsx +10 -6
  236. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
  237. package/src/components/Template/Template.stories.mdx +47 -43
  238. package/src/components/Template/Template.test.tsx +33 -0
  239. package/src/components/Template/Template.tsx +65 -60
  240. package/src/components/Template/__snapshots__/Template.test.tsx.snap +191 -20
  241. package/src/components/Text/Text.stories.mdx +20 -1
  242. package/src/components/Text/Text.test.tsx +12 -0
  243. package/src/components/Text/Text.tsx +6 -4
  244. package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
  245. package/src/components/TextInput/TextInput.stories.mdx +65 -19
  246. package/src/components/TextInput/TextInput.test.tsx +42 -28
  247. package/src/components/TextInput/TextInput.tsx +121 -113
  248. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
  249. package/src/components/Toggle/Toggle.stories.mdx +80 -22
  250. package/src/components/Toggle/Toggle.test.tsx +27 -9
  251. package/src/components/Toggle/Toggle.tsx +22 -18
  252. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +128 -5
  253. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
  254. package/src/components/VideoPlayer/VideoPlayer.test.tsx +23 -0
  255. package/src/components/VideoPlayer/VideoPlayer.tsx +133 -126
  256. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
  257. package/src/docs/Chakra.stories.mdx +50 -9
  258. package/src/docs/Welcome.stories.mdx +160 -41
  259. package/src/hooks/useCarouselStyles.stories.mdx +22 -2
  260. package/src/hooks/useCarouselStyles.ts +3 -2
  261. package/src/hooks/useNYPLTheme.stories.mdx +101 -0
  262. package/src/hooks/useNYPLTheme.ts +30 -6
  263. package/src/hooks/useWindowSize.stories.mdx +23 -0
  264. package/src/index.ts +4 -1
  265. package/src/styles/base/_place-holder.scss +1 -1
  266. package/src/theme/components/button.ts +15 -7
  267. package/src/theme/components/card.ts +30 -19
  268. package/src/theme/components/checkbox.ts +10 -8
  269. package/src/theme/components/checkboxGroup.ts +1 -1
  270. package/src/theme/components/componentWrapper.ts +2 -2
  271. package/src/theme/components/customTable.ts +39 -31
  272. package/src/theme/components/fieldset.ts +1 -2
  273. package/src/theme/components/global.ts +25 -20
  274. package/src/theme/components/heading.ts +1 -1
  275. package/src/theme/components/helperErrorText.ts +1 -0
  276. package/src/theme/components/hero.ts +13 -15
  277. package/src/theme/components/label.ts +4 -3
  278. package/src/theme/components/list.ts +73 -66
  279. package/src/theme/components/notification.ts +2 -2
  280. package/src/theme/components/radio.ts +9 -9
  281. package/src/theme/components/radioGroup.ts +1 -1
  282. package/src/theme/components/select.ts +35 -22
  283. package/src/theme/components/skeletonLoader.ts +3 -3
  284. package/src/theme/components/slider.ts +8 -7
  285. package/src/theme/components/statusBadge.ts +2 -2
  286. package/src/theme/components/structuredContent.ts +66 -1
  287. package/src/theme/components/tabs.ts +2 -2
  288. package/src/theme/components/template.ts +9 -9
  289. package/src/theme/components/textInput.ts +13 -12
  290. package/src/theme/components/toggle.ts +17 -10
  291. package/src/theme/components/videoPlayer.ts +1 -1
  292. package/src/theme/foundations/colors.ts +1 -1
  293. package/src/theme/foundations/radii.ts +1 -0
  294. package/src/theme/foundations/spacing.ts +70 -22
  295. package/src/theme/foundations/typography.ts +2 -2
  296. package/src/utils/componentCategories.ts +1 -2
  297. package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
  298. package/dist/helpers/generateUUID.d.ts +0 -1
  299. package/src/helpers/generateUUID.tsx +0 -5
@@ -51,19 +51,30 @@ export const enumValues = getStorybookEnumValues(ListTypes, "ListTypes");
51
51
  | Component Version | DS Version |
52
52
  | ----------------- | ---------- |
53
53
  | Added | `0.7.0` |
54
- | Latest | `0.25.13` |
54
+ | Latest | `0.26.0` |
55
+
56
+ ## Table of Contents
57
+
58
+ - [Overview](#overview)
59
+ - [Component Props](#component-props)
60
+ - [Accessibility](#accessibility)
61
+ - [Description List](#description-list)
62
+ - [Description List of Links](#description-list-of-links)
63
+ - [Lists with Data Props](#lists-with-data-props)
64
+
65
+ ## Overview
55
66
 
56
67
  <Description of={List} />
57
68
 
58
- export const animalCrossingDefinitions = [
69
+ export const animalCrossingDescriptions = [
59
70
  {
60
71
  term: "Mahi-mahi",
61
- definition:
72
+ description:
62
73
  'The mahi-mahi is an ocean fish known for its wide, somewhat-cute face. It can reach over six feet long. It is known by different names including "dolphinfish," even though it has no relation to dolphins. They live in only in warm, tropical waters...which perhaps explains the relaxed, happy look on their faces.',
63
74
  },
64
75
  {
65
76
  term: "Golden trout",
66
- definition: (
77
+ description: (
67
78
  <p>
68
79
  The golden trout is a <b>beautifully</b> colored fish that can only live
69
80
  in very clean waters. They are difficult to come across since they are
@@ -75,12 +86,12 @@ export const animalCrossingDefinitions = [
75
86
  },
76
87
  {
77
88
  term: "Rainbowfish",
78
- definition:
89
+ description:
79
90
  'The rainbowfish is a tropical fish known for its metallic colors and beautiful fins. There are over 50 different species, each unique and pleasing color. I must say, it does make me wish for feathers of a more exciting hue than "underbaked brownie."',
80
91
  },
81
92
  {
82
93
  term: "Suckerfish",
83
- definition: (
94
+ description: (
84
95
  <p>
85
96
  The{" "}
86
97
  <Link href="https://animalcrossing.fandom.com/wiki/Suckerfish">
@@ -111,30 +122,30 @@ export const itemGroups = [
111
122
  "Tools",
112
123
  "Villagers",
113
124
  ];
114
- export const definitions = [
125
+ export const descriptions = [
115
126
  {
116
127
  term: "Balrogs",
117
- definition:
128
+ description:
118
129
  'Demonic creatures of fire and shadow, Balrogs were fallen Maiar, loyal to the first Dark Lord, Morgoth. They participated in the wars of the First Age of Middle-earth but were mostly destroyed during the War of Wrath which ended the Age. By the Third Age, the only remaining Balrog was "Durin\'s Bane," the Balrog of Moria, killed by Gandalf.',
119
130
  },
120
131
  {
121
132
  term: "Dwarves",
122
- definition:
133
+ description:
123
134
  "The race of Dwarves preferred to live in mountains and caves, settling in places such as Erebor (the Lonely Mountain), the Iron Hills, the Blue Mountains, and Moria (Khazad-dûm) in the Misty Mountains. Aulë the Smith created Dwarves; he also invented the Dwarven language, known as Khuzdul. Dwarves mined and worked precious metals throughout the mountains of Middle-earth. The seven different groups of Dwarf-folk originated in the locations where the Seven Fathers of the Dwarves first awoke before the First Age.",
124
135
  },
125
136
  {
126
137
  term: "Elves",
127
- definition:
138
+ description:
128
139
  'The Elves, or Firstborn, were the first of Eru\'s Children to awaken. Born under the stars before the ascension of the Moon and the Sun, they retain a special love for light and an inner spirit endowed with unique gifts. They call themselves the Quendi, or "Speakers", for they were the first to utter words; and, even now, no race understands language and song like the Firstborn. Fair and fine featured, brilliant and proud, immortal and strong, tall and agile, they are the most blessed of the Free Peoples. They can see as well under moon or starlight as a man at the height of day. They cannot become sick or scarred, but if an Elf should die, from violence or losing the will to live from grief, their spirit goes to the halls of Mandos, and as they are bound to Arda and cannot leave until the world is broken and remade. Elven skill and agility is legendary: for instance, walking atop freshly fallen snow without leaving a trace of their passing. On a clear day they can see ten miles with perfect clarity and detail up to 100 miles. These gifts come at great cost, though: they are strongly bound to Fate (see Mandos) and hated by Morgoth. No other race has been blessed and cursed more than the Quendi.',
129
140
  },
130
141
  {
131
142
  term: "Ents",
132
- definition:
143
+ description:
133
144
  "Ents were an ancient race of tree-like creatures, having become like the trees that they shepherd. They were created by Yavanna and given life by Ilúvatar. By the Third Age, they were a dwindling race, having long ago lost their mates, the Entwives.",
134
145
  },
135
146
  {
136
147
  term: "Hobbits",
137
- definition:
148
+ description:
138
149
  'Hobbits are a race of Middle-earth, also known as "halflings" on account of their short stature, roughly half the size of men. They are characterized by curly hair on their heads and leathery feet that have furry insteps, for which they did not wear shoes. Many hobbits live in the Shire as well as Bree, and they once lived in the vales of the Anduin. They are fond of an unadventurous life of farming, eating, and socializing. There were three types of Hobbits: The Harfoots were the most numerous. The Stoors had an affinity for water, boats and swimming; the Fallohides were an adventurous people. The origin of hobbits is unclear, but of all the races they have the closest affinity to men, and in the Prologue to The Lord of the Rings Tolkien calls them relatives of men.',
139
150
  },
140
151
  ];
@@ -155,11 +166,11 @@ export const definitions = [
155
166
  >
156
167
  {(args) => (
157
168
  <List {...args} type={enumValues.getValue(args.type)}>
158
- {args.type !== "ListTypes.Definition"
169
+ {args.type !== "ListTypes.Description"
159
170
  ? itemGroups.map((item, i) => <li key={i}>{item}</li>)
160
- : definitions.map((item, i) => [
171
+ : descriptions.map((item, i) => [
161
172
  <dt key={`dt_${i}`}>{item.term}</dt>,
162
- <dd key={`dd_${i}`}>{item.definition}</dd>,
173
+ <dd key={`dd_${i}`}>{item.description}</dd>,
163
174
  ])}
164
175
  </List>
165
176
  )}
@@ -168,22 +179,46 @@ export const definitions = [
168
179
 
169
180
  <ArgsTable story="List with Controls" />
170
181
 
171
- ## Definition List
182
+ ## Accessibility
183
+
184
+ Internally, the `List` component implements native HTML markup for unordered,
185
+ ordered, and description lists. This includes `ul`, `ol`, and `dl` elements.
186
+ When data is passed into the `listItems` data prop, the appropriate children
187
+ HTML elements are used. This includes `li` for unorder and ordered lists, and
188
+ `dt` and `dd` elements for description lists.
189
+
190
+ The description type for the `List` component is wrapped in a `section` element
191
+ with an `h2` header. Keep that in mind when ordering headings on the page.
192
+
193
+ Resources:
194
+
195
+ - [W3C WAI Content Structure](https://www.w3.org/WAI/tutorials/page-structure/content/)
196
+ - [Deque University Appropriate Semantic Markup for Lists](https://dequeuniversity.com/tips/list-markup)
197
+
198
+ ## Description List
199
+
200
+ _Note: This element is officially called the "Description List" element in HTML5.
201
+ Before HTML5, it was called the "Definition List" element and some online resources
202
+ may still use this name. In the Reservoir Design System, we will use the
203
+ "Description List" name._
204
+
205
+ - [W3C Using description lists](https://www.w3.org/WAI/WCAG21/Techniques/html/H40.html)
206
+ - [MDN dl: The Description List element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl)
172
207
 
173
- To render a definition list, pass in `ListTypes.Definition` to the `type` prop.
174
- The optional `title` prop will now render above the definition list element.
208
+ To render a description list, pass in `ListTypes.Description` to the `type` prop.
209
+ The optional `title` prop will now render above the description list element.
175
210
  This type of list renders `dt` and `dd` elements.
176
211
 
177
212
  ```jsx
178
- <List type={ListTypes.Definition}>
213
+ <List type={ListTypes.Description}>
179
214
  <dt>Term</dt>
180
- <dd>Definition</dd>
215
+ <dd>Description</dd>
181
216
  </List>
182
217
  ```
183
218
 
184
219
  <Canvas>
185
220
  <Story
186
- name="Definition List"
221
+ name="Description List"
187
222
  args={{
188
223
  id: "nypl-list2",
189
224
  noStyling: false,
@@ -202,23 +237,23 @@ This type of list renders `dt` and `dd` elements.
202
237
  }}
203
238
  >
204
239
  {(args) => (
205
- <List {...args} type={ListTypes.Definition}>
206
- {definitions.map((item, i) => [
240
+ <List {...args} type={ListTypes.Description}>
241
+ {descriptions.map((item, i) => [
207
242
  <dt key={`dt_${i}`}>{item.term}</dt>,
208
- <dd key={`dd_${i}`}>{item.definition}</dd>,
243
+ <dd key={`dd_${i}`}>{item.description}</dd>,
209
244
  ])}
210
245
  </List>
211
246
  )}
212
247
  </Story>
213
248
  </Canvas>
214
249
 
215
- ## Definition List of Links
250
+ ## Description List of Links
216
251
 
217
252
  An example with HTML elements inside of the `dd` elements.
218
253
 
219
254
  <Canvas>
220
255
  <Story
221
- name="Definition List of Links"
256
+ name="Description List of Links"
222
257
  args={{
223
258
  noStyling: false,
224
259
  title: "Details",
@@ -236,7 +271,7 @@ An example with HTML elements inside of the `dd` elements.
236
271
  }}
237
272
  >
238
273
  {(args) => (
239
- <List {...args} type={ListTypes.Definition}>
274
+ <List {...args} type={ListTypes.Description}>
240
275
  <dt>Authors</dt>
241
276
  <dd>
242
277
  <a href="#">Chirwa, Ephraim Wadonda, author</a>
@@ -304,16 +339,16 @@ const fishArray = ["Mahi-mahi", "Golden trout", "Rainbowfish", "Suckerfish"];
304
339
  <List type={ListTypes.Unordered} listItems={fishArray} />
305
340
  ```
306
341
 
307
- ### Definition
342
+ ### Description
308
343
 
309
- For lists of type `ListTypes.Definition` (dl), `dt` and `dd` elements can be
344
+ For lists of type `ListTypes.Description` (dl), `dt` and `dd` elements can be
310
345
  passed as children. If that's not possible but the data to render is stored as
311
346
  an array of objects, then that data array can be passed into `listItems`. The
312
- object must have two keys, `term` and `definition`.
347
+ object must have two keys, `term` and `description`.
313
348
 
314
349
  ```jsx
315
350
  // With `dt`/`dd` elements
316
- <List type={ListTypes.Definition} title="Animal Corssing Fish">
351
+ <List type={ListTypes.Description} title="Animal Crossing Fish">
317
352
  <dt>Mahi-mahi</dt>
318
353
  <dd>The mahi-mahi is an ocean fish known...</dd>
319
354
  <dt>Golden trout</dt>
@@ -325,28 +360,28 @@ object must have two keys, `term` and `definition`.
325
360
  </List>
326
361
 
327
362
  // With `itemList` data prop
328
- const fishDefinitions = [
363
+ const fishDescriptions = [
329
364
  {
330
365
  term: "Mahi-mahi",
331
- definition: "The mahi-mahi is an ocean fish known..."
366
+ description: "The mahi-mahi is an ocean fish known..."
332
367
  },
333
368
  {
334
369
  term: "Golden trout",
335
- definition: "The golden trout is a beautifully colored fish..."
370
+ description: "The golden trout is a beautifully colored fish..."
336
371
  },
337
372
  {
338
373
  term: "Rainbowfish",
339
- definition: "The rainbowfish is a tropical fish known..."
374
+ description: "The rainbowfish is a tropical fish known..."
340
375
  },
341
376
  {
342
377
  term: "Suckerfish"
343
- definition: "he suckerfish is a curious fish that..."
378
+ description: "he suckerfish is a curious fish that..."
344
379
  }
345
380
  ];
346
381
  <List
347
- listItems={fishDefinitions}
382
+ listItems={fishDescriptions}
348
383
  title="Animal Crossing Fish"
349
- type={ListTypes.Definition}
384
+ type={ListTypes.Description}
350
385
  />
351
386
  ```
352
387
 
@@ -354,7 +389,7 @@ const fishDefinitions = [
354
389
  <Story
355
390
  name="List with Data Props"
356
391
  args={{
357
- listItems: animalCrossingDefinitions,
392
+ listItems: animalCrossingDescriptions,
358
393
  noStyling: false,
359
394
  title: "Animal Crossing Fish",
360
395
  }}
@@ -364,6 +399,6 @@ const fishDefinitions = [
364
399
  type: { control: false },
365
400
  }}
366
401
  >
367
- {(args) => <List {...args} type={ListTypes.Definition} />}
402
+ {(args) => <List {...args} type={ListTypes.Description} />}
368
403
  </Story>
369
404
  </Canvas>
@@ -7,14 +7,14 @@ import List from "./List";
7
7
  import { ListTypes } from "./ListTypes";
8
8
 
9
9
  const fishArray = ["Mahi-mahi", "Golden trout", "Rainbowfish", "Suckerfish"];
10
- const fishDefinitions = [
10
+ const fishDescriptions = [
11
11
  {
12
12
  term: "Mahi-mahi",
13
- definition: <p>The mahi-mahi is an ocean fish known...</p>,
13
+ description: <p>The mahi-mahi is an ocean fish known...</p>,
14
14
  },
15
15
  {
16
16
  term: "Golden trout",
17
- definition: "The golden trout is a beautifully colored fish...",
17
+ description: "The golden trout is a beautifully colored fish...",
18
18
  },
19
19
  ];
20
20
 
@@ -43,12 +43,12 @@ describe("List Accessibility", () => {
43
43
  rerender(<List type={ListTypes.Ordered} listItems={fishArray} />);
44
44
  expect(await axe(container)).toHaveNoViolations();
45
45
  });
46
- it("passes axe accessibility test for definition list", async () => {
46
+ it("passes axe accessibility test for description list", async () => {
47
47
  const { container } = render(
48
48
  <List
49
- type={ListTypes.Definition}
49
+ type={ListTypes.Description}
50
50
  title="Animal Crossing Fish"
51
- listItems={fishDefinitions}
51
+ listItems={fishDescriptions}
52
52
  />
53
53
  );
54
54
  expect(await axe(container)).toHaveNoViolations();
@@ -102,9 +102,9 @@ describe("List", () => {
102
102
  expect(screen.getByText("Suckerfish")).toBeInTheDocument();
103
103
  });
104
104
 
105
- it("returns definition list", () => {
105
+ it("returns description list", () => {
106
106
  render(
107
- <List type={ListTypes.Definition}>
107
+ <List type={ListTypes.Description}>
108
108
  <dt>Mahi-mahi</dt>
109
109
  <dd>The mahi-mahi is an ocean fish known...</dd>
110
110
  </List>
@@ -116,12 +116,12 @@ describe("List", () => {
116
116
  ).toBeInTheDocument();
117
117
  });
118
118
 
119
- it("returns definition list with the `listItems` prop", () => {
119
+ it("returns description list with the `listItems` prop", () => {
120
120
  render(
121
121
  <List
122
- type={ListTypes.Definition}
122
+ type={ListTypes.Description}
123
123
  title="Animal Crossing Fish"
124
- listItems={fishDefinitions}
124
+ listItems={fishDescriptions}
125
125
  />
126
126
  );
127
127
  expect(screen.getAllByRole("definition")).toHaveLength(2);
@@ -166,17 +166,17 @@ describe("List", () => {
166
166
  );
167
167
  });
168
168
 
169
- it("consoles a warning when you pass a definition list children that aren't `<dt>`s or `<dd>`s", () => {
169
+ it("consoles a warning when you pass a description list children that aren't `<dt>`s or `<dd>`s", () => {
170
170
  const warn = jest.spyOn(console, "warn");
171
171
  render(
172
- <List type={ListTypes.Definition}>
172
+ <List type={ListTypes.Description}>
173
173
  <span>Mahi-mahi</span>
174
174
  <span>Golden trout</span>
175
175
  <span>Rainbowfish</span>
176
176
  </List>
177
177
  );
178
178
  expect(warn).toHaveBeenCalledWith(
179
- "NYPL Reservoir List: Direct children of `List` (definition) must be " +
179
+ "NYPL Reservoir List: Direct children of `List` (description) must be " +
180
180
  "`<dt>`s and `<dd>`s."
181
181
  );
182
182
  });
@@ -216,13 +216,57 @@ describe("List", () => {
216
216
  />
217
217
  )
218
218
  .toJSON();
219
- const definition = renderer
219
+ const description = renderer
220
220
  .create(
221
221
  <List
222
- id="definition"
223
- type={ListTypes.Definition}
222
+ id="description"
223
+ type={ListTypes.Description}
224
224
  title="Animal Crossing Fish"
225
- listItems={fishDefinitions}
225
+ listItems={fishDescriptions}
226
+ />
227
+ )
228
+ .toJSON();
229
+ const withChakraPropsUnordered = renderer
230
+ .create(
231
+ <List
232
+ id="chakra"
233
+ type={ListTypes.Unordered}
234
+ listItems={fishArray}
235
+ p="20px"
236
+ color="ui.error.primary"
237
+ />
238
+ )
239
+ .toJSON();
240
+ const withOtherPropsUnordered = renderer
241
+ .create(
242
+ <List
243
+ id="other"
244
+ type={ListTypes.Unordered}
245
+ listItems={fishArray}
246
+ data-testid="other"
247
+ />
248
+ )
249
+ .toJSON();
250
+ const withChakraPropsDescription = renderer
251
+ .create(
252
+ <List
253
+ id="chakra"
254
+ type={ListTypes.Description}
255
+ title="Animal Crossing Fish"
256
+ listItems={fishDescriptions}
257
+ p="20px"
258
+ color="ui.error.primary"
259
+ />
260
+ )
261
+ .toJSON();
262
+ const withOtherPropsDescription = renderer
263
+ .create(
264
+ <List
265
+ id="other"
266
+ type={ListTypes.Description}
267
+ title="Animal Crossing Fish"
268
+ listItems={fishDescriptions}
269
+ data-testid="other"
226
270
  />
227
271
  )
228
272
  .toJSON();
@@ -231,6 +275,10 @@ describe("List", () => {
231
275
  expect(unorderedNoStyling).toMatchSnapshot();
232
276
  expect(ordered).toMatchSnapshot();
233
277
  expect(orderedNoStyling).toMatchSnapshot();
234
- expect(definition).toMatchSnapshot();
278
+ expect(description).toMatchSnapshot();
279
+ expect(withChakraPropsUnordered).toMatchSnapshot();
280
+ expect(withOtherPropsUnordered).toMatchSnapshot();
281
+ expect(withChakraPropsDescription).toMatchSnapshot();
282
+ expect(withOtherPropsDescription).toMatchSnapshot();
235
283
  });
236
284
  });
@@ -1,14 +1,12 @@
1
+ import { As, Box, chakra, useStyleConfig } from "@chakra-ui/react";
1
2
  import * as React from "react";
2
- import { As, Box, useStyleConfig } from "@chakra-ui/react";
3
3
 
4
4
  import { ListTypes } from "./ListTypes";
5
5
  import Heading from "../Heading/Heading";
6
6
  import { HeadingLevels } from "../Heading/HeadingTypes";
7
- import generateUUID from "../../helpers/generateUUID";
8
-
9
- interface DefinitionProps {
7
+ interface DescriptionProps {
10
8
  term: string;
11
- definition: string | JSX.Element;
9
+ description: string | JSX.Element;
12
10
  }
13
11
  export interface ListProps {
14
12
  /** Optionally pass in additional Chakra-based styles. */
@@ -21,36 +19,37 @@ export interface ListProps {
21
19
  inline?: boolean;
22
20
  /** Data to render if children are not passed. For `ListTypes.Ordered` and
23
21
  * `ListTypes.Unordered` `List` types, the data structure is an array of
24
- * strings to renders as `li` items. For `ListTypes.Definition` `List` types,
25
- * the data structure is an array of objects with `term` and `definition`
22
+ * strings to renders as `li` items. For `ListTypes.Description` `List` types,
23
+ * the data structure is an array of objects with `term` and `description`
26
24
  * properties to render `dt` and `dd` elements, respectively.
27
25
  */
28
- listItems?: (string | JSX.Element | DefinitionProps)[];
26
+ listItems?: (string | JSX.Element | DescriptionProps)[];
29
27
  /** Remove list styling. */
30
28
  noStyling?: boolean;
31
29
  /** An optional title that will appear over the list. This prop only applies
32
- * to Definition Lists. */
30
+ * to Description Lists. */
33
31
  title?: string;
34
- /** The type of list: Ordered, Unordered, or Definition. Unordered by default. */
32
+ /** The type of list: Ordered, Unordered, or Description. Unordered by default. */
35
33
  type: ListTypes;
36
34
  }
37
35
 
38
36
  /**
39
- * A component that renders list item `li` elements or definition item `dt`
37
+ * A component that renders list item `li` elements or description item `dt`
40
38
  * and `dd` elements based on the `type` prop. Note that the `title` prop will
41
- * only display for the `Definition` list type.
39
+ * only display for the `Description` list type.
42
40
  */
43
- export default function List(props: React.PropsWithChildren<ListProps>) {
41
+ export const List = chakra((props: React.PropsWithChildren<ListProps>) => {
44
42
  const {
45
43
  additionalStyles = {},
46
44
  children,
47
45
  className,
48
- id = generateUUID(),
46
+ id,
49
47
  inline = false,
50
48
  listItems,
51
49
  noStyling = false,
52
50
  title,
53
51
  type = ListTypes.Unordered,
52
+ ...rest
54
53
  } = props;
55
54
  const styles = useStyleConfig("List", { inline, noStyling, variant: type });
56
55
  const finalStyles = { ...styles, ...additionalStyles };
@@ -78,7 +77,7 @@ export default function List(props: React.PropsWithChildren<ListProps>) {
78
77
  * first, otherwise it will check and render the data passed into the
79
78
  * `listItems` props based on the `ListType` type. If it is of type "Unordered"
80
79
  * or "Ordered", it will return `li` elements. Otherwise, it will return a
81
- * combination of `dt` and `dd` elements for the "Definition" type.
80
+ * combination of `dt` and `dd` elements for the "Description" type.
82
81
  */
83
82
  const listChildrenElms = (listType: ListTypes) => {
84
83
  if (children) {
@@ -86,10 +85,10 @@ export default function List(props: React.PropsWithChildren<ListProps>) {
86
85
  }
87
86
  if (listType === ListTypes.Ordered || listType === ListTypes.Unordered) {
88
87
  return listItems.map((item, i) => <li key={i}>{item}</li>);
89
- } else if (listType === ListTypes.Definition) {
90
- return (listItems as DefinitionProps[]).map((item, i) => [
88
+ } else if (listType === ListTypes.Description) {
89
+ return (listItems as DescriptionProps[]).map((item, i) => [
91
90
  <dt key={`${i}-term`}>{item.term}</dt>,
92
- <dd key={`${i}-def`}>{item.definition}</dd>,
91
+ <dd key={`${i}-des`}>{item.description}</dd>,
93
92
  ]);
94
93
  }
95
94
  return null;
@@ -111,7 +110,7 @@ export default function List(props: React.PropsWithChildren<ListProps>) {
111
110
  * Checks for `dt` and `dd` elements and consoles a warning if the
112
111
  * children are different HTML elements.
113
112
  */
114
- const checkDefinitionChildrenError = () => {
113
+ const checkDescriptionChildrenError = () => {
115
114
  React.Children.map(children, function (child: React.ReactElement) {
116
115
  if (
117
116
  child.type !== "dt" &&
@@ -122,7 +121,7 @@ export default function List(props: React.PropsWithChildren<ListProps>) {
122
121
  child.props.mdxType !== React.Fragment
123
122
  ) {
124
123
  console.warn(
125
- "NYPL Reservoir List: Direct children of `List` (definition) must " +
124
+ "NYPL Reservoir List: Direct children of `List` (description) must " +
126
125
  "be `<dt>`s and `<dd>`s."
127
126
  );
128
127
  }
@@ -132,14 +131,26 @@ export default function List(props: React.PropsWithChildren<ListProps>) {
132
131
  if (type === ListTypes.Ordered || type === ListTypes.Unordered) {
133
132
  checkListChildrenError(type);
134
133
  listElement = (
135
- <Box as={type as As} id={id} className={className} __css={finalStyles}>
134
+ <Box
135
+ as={type as As}
136
+ id={id}
137
+ className={className}
138
+ __css={finalStyles}
139
+ {...rest}
140
+ >
136
141
  {listChildrenElms(type)}
137
142
  </Box>
138
143
  );
139
- } else if (type === ListTypes.Definition) {
140
- checkDefinitionChildrenError();
144
+ } else if (type === ListTypes.Description) {
145
+ checkDescriptionChildrenError();
141
146
  listElement = (
142
- <Box as="section" id={id} className={className} __css={finalStyles}>
147
+ <Box
148
+ as="section"
149
+ id={id}
150
+ className={className}
151
+ __css={finalStyles}
152
+ {...rest}
153
+ >
143
154
  {title && (
144
155
  <Heading id={`${id}-heading`} level={HeadingLevels.Two}>
145
156
  {title}
@@ -151,4 +162,6 @@ export default function List(props: React.PropsWithChildren<ListProps>) {
151
162
  }
152
163
 
153
164
  return listElement;
154
- }
165
+ });
166
+
167
+ export default List;
@@ -1,5 +1,5 @@
1
1
  export enum ListTypes {
2
2
  Ordered = "ol",
3
3
  Unordered = "ul",
4
- Definition = "dl",
4
+ Description = "dl",
5
5
  }