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

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 +118 -1
  2. package/README.md +98 -50
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Button/Button.d.ts +13 -8
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +36 -52
  7. package/dist/components/Card/CardTypes.d.ts +0 -15
  8. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  9. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -2
  10. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -34
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/Heading/Heading.d.ts +4 -4
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  16. package/dist/components/Icons/Icon.d.ts +8 -0
  17. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  18. package/dist/components/Icons/IconTypes.d.ts +11 -0
  19. package/dist/components/Image/Image.d.ts +19 -9
  20. package/dist/components/Image/ImageTypes.d.ts +20 -0
  21. package/dist/components/Link/Link.d.ts +4 -0
  22. package/dist/components/List/List.d.ts +19 -14
  23. package/dist/components/Notification/Notification.d.ts +37 -16
  24. package/dist/components/Pagination/Pagination.d.ts +16 -13
  25. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  27. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  28. package/dist/components/Radio/Radio.d.ts +2 -0
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  31. package/dist/components/Select/Select.d.ts +2 -0
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  33. package/dist/components/Slider/Slider.d.ts +57 -0
  34. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  35. package/dist/components/Tabs/Tabs.d.ts +1 -1
  36. package/dist/components/TextInput/TextInput.d.ts +12 -0
  37. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  38. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  39. package/dist/design-system-react-components.cjs.development.js +6131 -3715
  40. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  41. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  43. package/dist/design-system-react-components.esm.js +6124 -3699
  44. package/dist/design-system-react-components.esm.js.map +1 -1
  45. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  46. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  47. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  48. package/dist/hooks/useWindowSize.d.ts +10 -0
  49. package/dist/index.d.ts +13 -8
  50. package/dist/resources.scss +180 -170
  51. package/dist/styles.css +1 -1
  52. package/dist/theme/components/button.d.ts +22 -8
  53. package/dist/theme/components/card.d.ts +168 -0
  54. package/dist/theme/components/checkbox.d.ts +5 -1
  55. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  56. package/dist/theme/components/componentWrapper.d.ts +11 -0
  57. package/dist/theme/components/datePicker.d.ts +16 -0
  58. package/dist/theme/components/fieldset.d.ts +27 -0
  59. package/dist/theme/components/global.d.ts +23 -13
  60. package/dist/theme/components/globalMixins.d.ts +9 -1
  61. package/dist/theme/components/heading.d.ts +5 -0
  62. package/dist/theme/components/helperErrorText.d.ts +10 -0
  63. package/dist/theme/components/hero.d.ts +1 -0
  64. package/dist/theme/components/horizontalRule.d.ts +14 -0
  65. package/dist/theme/components/image.d.ts +31 -0
  66. package/dist/theme/components/label.d.ts +5 -3
  67. package/dist/theme/components/link.d.ts +4 -0
  68. package/dist/theme/components/list.d.ts +89 -0
  69. package/dist/theme/components/notification.d.ts +75 -0
  70. package/dist/theme/components/pagination.d.ts +19 -0
  71. package/dist/theme/components/progressIndicator.d.ts +50 -0
  72. package/dist/theme/components/radioGroup.d.ts +12 -0
  73. package/dist/theme/components/select.d.ts +11 -2
  74. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  75. package/dist/theme/components/slider.d.ts +51 -0
  76. package/dist/theme/components/tabs.d.ts +54 -3
  77. package/dist/theme/components/textInput.d.ts +8 -1
  78. package/dist/theme/components/videoPlayer.d.ts +40 -0
  79. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  80. package/dist/theme/foundations/global.d.ts +6 -1
  81. package/dist/theme/foundations/radii.d.ts +5 -0
  82. package/dist/theme/foundations/spacing.d.ts +16 -16
  83. package/package.json +72 -83
  84. package/src/__tests__/setup.ts +2 -2
  85. package/src/components/Accordion/Accordion.stories.mdx +39 -44
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  87. package/src/components/Autosuggest/Autosuggest.stories.tsx +2 -1
  88. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  89. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +14 -10
  90. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +23 -0
  91. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  92. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +199 -1
  93. package/src/components/Button/Button.stories.mdx +15 -10
  94. package/src/components/Button/Button.test.tsx +21 -7
  95. package/src/components/Button/Button.tsx +22 -34
  96. package/src/components/Button/ButtonTypes.tsx +1 -0
  97. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  98. package/src/components/Card/Card.stories.mdx +296 -259
  99. package/src/components/Card/Card.test.tsx +156 -84
  100. package/src/components/Card/Card.tsx +195 -145
  101. package/src/components/Card/CardTypes.tsx +0 -17
  102. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  103. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  104. package/src/components/CardEdition/_CardEdition.scss +22 -23
  105. package/src/components/Chakra/Box.stories.mdx +15 -16
  106. package/src/components/Chakra/Center.stories.mdx +31 -16
  107. package/src/components/Chakra/Grid.stories.mdx +28 -15
  108. package/src/components/Chakra/Stack.stories.mdx +35 -18
  109. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  110. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  111. package/src/components/Checkbox/Checkbox.tsx +39 -33
  112. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  113. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  114. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +29 -2
  115. package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -18
  116. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +47 -81
  117. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  118. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  119. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  120. package/src/components/DatePicker/DatePicker.tsx +159 -128
  121. package/src/components/DatePicker/_DatePicker.scss +33 -67
  122. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  123. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  124. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  125. package/src/components/Fieldset/Fieldset.tsx +52 -0
  126. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  127. package/src/components/Form/Form.stories.mdx +24 -6
  128. package/src/components/Form/Form.test.tsx +1 -1
  129. package/src/components/Form/Form.tsx +1 -0
  130. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  131. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  132. package/src/components/Heading/Heading.stories.mdx +3 -4
  133. package/src/components/Heading/Heading.tsx +5 -5
  134. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  135. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  136. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  137. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  138. package/src/components/Hero/Hero.stories.mdx +12 -2
  139. package/src/components/Hero/Hero.tsx +1 -1
  140. package/src/components/Hero/HeroTypes.tsx +1 -0
  141. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  142. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  143. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  144. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  145. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  146. package/src/components/Icons/Icon.stories.mdx +12 -4
  147. package/src/components/Icons/Icon.test.tsx +18 -0
  148. package/src/components/Icons/Icon.tsx +16 -1
  149. package/src/components/Icons/IconSvgs.tsx +22 -0
  150. package/src/components/Icons/IconTypes.tsx +11 -0
  151. package/src/components/Image/Image.stories.mdx +220 -0
  152. package/src/components/Image/Image.test.tsx +131 -29
  153. package/src/components/Image/Image.tsx +84 -56
  154. package/src/components/Image/ImageTypes.ts +22 -0
  155. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  156. package/src/components/Input/Input.stories.tsx +23 -67
  157. package/src/components/Input/Input.test.tsx +4 -4
  158. package/src/components/Input/_Input.scss +23 -14
  159. package/src/components/Link/Link.tsx +4 -1
  160. package/src/components/List/List.stories.mdx +124 -49
  161. package/src/components/List/List.test.tsx +142 -63
  162. package/src/components/List/List.tsx +89 -93
  163. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  164. package/src/components/Modal/Modal.stories.mdx +3 -3
  165. package/src/components/Modal/_Modal.scss +2 -2
  166. package/src/components/Notification/Notification.stories.mdx +109 -112
  167. package/src/components/Notification/Notification.test.tsx +99 -110
  168. package/src/components/Notification/Notification.tsx +156 -159
  169. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  170. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  171. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  172. package/src/components/Pagination/Pagination.test.tsx +276 -146
  173. package/src/components/Pagination/Pagination.tsx +174 -154
  174. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  175. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  176. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  177. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  178. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  179. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  180. package/src/components/Radio/Radio.test.tsx +20 -4
  181. package/src/components/Radio/Radio.tsx +6 -3
  182. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  183. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  184. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  185. package/src/components/RadioGroup/RadioGroup.tsx +19 -19
  186. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  187. package/src/components/SearchBar/SearchBar.Test.tsx +20 -1
  188. package/src/components/SearchBar/SearchBar.stories.mdx +113 -8
  189. package/src/components/SearchBar/SearchBar.tsx +20 -10
  190. package/src/components/Select/Select.test.tsx +12 -0
  191. package/src/components/Select/Select.tsx +5 -2
  192. package/src/components/Select/SelectTypes.tsx +1 -0
  193. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  194. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  195. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  196. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  197. package/src/components/Slider/Slider.stories.mdx +529 -0
  198. package/src/components/Slider/Slider.test.tsx +653 -0
  199. package/src/components/Slider/Slider.tsx +303 -0
  200. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  201. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  202. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  203. package/src/components/StyleGuide/Buttons.stories.mdx +89 -73
  204. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  205. package/src/components/StyleGuide/Colors.stories.mdx +171 -311
  206. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  207. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  208. package/src/components/StyleGuide/Iconography.stories.mdx +85 -91
  209. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  210. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  211. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  212. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  213. package/src/components/Tabs/Tabs.tsx +87 -64
  214. package/src/components/Template/Template.stories.mdx +25 -27
  215. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  216. package/src/components/TextInput/TextInput.test.tsx +22 -2
  217. package/src/components/TextInput/TextInput.tsx +28 -8
  218. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  219. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  220. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  222. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  223. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  224. package/src/docs/Chakra.stories.mdx +244 -63
  225. package/src/docs/Intro.stories.mdx +5 -2
  226. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  227. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  228. package/src/hooks/useCarouselStyles.ts +34 -0
  229. package/src/hooks/useNYPLTheme.ts +67 -0
  230. package/src/hooks/useWindowSize.ts +40 -0
  231. package/src/index.ts +22 -19
  232. package/src/resources.scss +5 -5
  233. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  234. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  235. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  236. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  237. package/src/styles/base/_place-holder.scss +14 -3
  238. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  239. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  240. package/src/styles/space/_space-stack.scss +116 -0
  241. package/src/styles.scss +13 -60
  242. package/src/theme/components/button.ts +21 -15
  243. package/src/theme/components/card.ts +174 -0
  244. package/src/theme/components/checkbox.ts +8 -3
  245. package/src/theme/components/checkboxGroup.ts +8 -0
  246. package/src/theme/components/componentWrapper.ts +10 -0
  247. package/src/theme/components/datePicker.ts +17 -0
  248. package/src/theme/components/fieldset.ts +18 -0
  249. package/src/theme/components/global.ts +26 -15
  250. package/src/theme/components/globalMixins.ts +9 -1
  251. package/src/theme/components/heading.ts +10 -5
  252. package/src/theme/components/helperErrorText.ts +9 -0
  253. package/src/theme/components/hero.ts +4 -3
  254. package/src/theme/components/horizontalRule.ts +13 -0
  255. package/src/theme/components/icon.ts +9 -9
  256. package/src/theme/components/image.ts +116 -0
  257. package/src/theme/components/label.ts +3 -10
  258. package/src/theme/components/link.ts +5 -1
  259. package/src/theme/components/list.ts +73 -0
  260. package/src/theme/components/notification.ts +93 -0
  261. package/src/theme/components/pagination.ts +20 -0
  262. package/src/theme/components/progressIndicator.ts +62 -0
  263. package/src/theme/components/radio.ts +2 -2
  264. package/src/theme/components/radioGroup.ts +8 -0
  265. package/src/theme/components/select.ts +6 -3
  266. package/src/theme/components/skeletonLoader.ts +107 -0
  267. package/src/theme/components/slider.ts +79 -0
  268. package/src/theme/components/statusBadge.ts +1 -2
  269. package/src/theme/components/tabs.ts +49 -19
  270. package/src/theme/components/template.ts +8 -8
  271. package/src/theme/components/textInput.ts +5 -4
  272. package/src/theme/components/videoPlayer.ts +49 -0
  273. package/src/theme/foundations/breakpoints.ts +8 -8
  274. package/src/theme/foundations/global.ts +6 -1
  275. package/src/theme/foundations/radii.ts +6 -0
  276. package/src/theme/foundations/spacing.ts +24 -24
  277. package/src/theme/index.ts +41 -10
  278. package/src/utils/componentCategories.ts +4 -3
  279. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  280. package/dist/components/Image/Image.stories.d.ts +0 -18
  281. package/dist/components/List/List.stories.d.ts +0 -7
  282. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  283. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  284. package/src/components/Button/_Button.scss +0 -32
  285. package/src/components/Card/_Card.scss +0 -308
  286. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  287. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  288. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  289. package/src/components/Image/Image.stories.tsx +0 -54
  290. package/src/components/Image/_Image.scss +0 -38
  291. package/src/components/List/List.stories.tsx +0 -139
  292. package/src/components/List/_List.scss +0 -76
  293. package/src/components/Notification/_Notification.scss +0 -110
  294. package/src/components/Pagination/_Pagination.scss +0 -40
  295. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  296. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  297. package/src/styles/01-colors/_colors-brand.scss +0 -62
  298. package/src/styles/01-colors/_colors-utility.scss +0 -67
  299. package/src/styles/02-typography/_type-scale.css +0 -11
  300. package/src/styles/02-typography/_type-weight.css +0 -7
  301. package/src/styles/02-typography/_typefaces.css +0 -4
  302. package/src/styles/03-space/_space-stack.scss +0 -116
  303. package/src/styles/03-space/_space.css +0 -30
  304. package/src/styles/base/_card-grid.scss +0 -78
  305. package/src/styles/base/_typography.scss +0 -11
  306. package/src/theme/components/customCheckboxGroup.ts +0 -12
  307. package/src/theme/components/customRadioGroup.ts +0 -12
@@ -1,47 +1,45 @@
1
1
  // HorizontalRule
2
2
  import * as React from "react";
3
- import bem from "../../utils/bem";
3
+ import { Box, useStyleConfig } from "@chakra-ui/react";
4
4
 
5
5
  export interface HorizontalRuleProps {
6
- /** Optional alignment value to align the horizontal rule to one side or the other when the width is less than 100%. If omitted, the horizobntal rule will have a default center alignment. */
6
+ /** Optional alignment value to align the horizontal rule to one side or the
7
+ * other when the width is less than 100%. If omitted, the horizontal rule
8
+ * will have a default center alignment. */
7
9
  align?: "left" | "right";
8
- /** Additional attributes passed to the horizontal rule */
9
- attributes?: { [key: string]: any };
10
10
  /** ClassName you can add in addition to `horizontal-rule` */
11
11
  className?: string;
12
- /** Optional height value. This value should be entered with the same formatting as a CSS height attribute (ex. `2%`, `5px`, `1.5rem`). If omitted, the horizobntal rule will have a default height of 2px. */
12
+ /** Optional height value. This value should be entered with the same
13
+ * formatting as a CSS height attribute except for percent values (ex. `2`,
14
+ * `5px`, `1.5rem`). If this prop is omitted or a percent value is used, the
15
+ * horizontal rule will have a default height of 2px. */
13
16
  height?: string;
14
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
15
- modifiers?: string[];
16
- /** Optional width value. This value should be entered with the same formatting as a CSS width attribute (ex. `50%`, `640px`, `20rem`). If omitted, the horizobntal rule will have a default width of 100%. */
17
+ /** Optional width value. This value should be entered with the same
18
+ * formatting as a CSS width attribute (ex. `50%`, `640px`, `20rem`). If
19
+ * omitted, the horizontal rule will have a default width of "auto". */
17
20
  width?: string;
18
21
  }
19
22
 
20
23
  export default function HorizontalRule(
21
24
  props: React.ComponentProps<"hr"> & HorizontalRuleProps
22
25
  ) {
23
- const {
24
- align,
25
- attributes = {},
26
- className,
27
- width = "auto",
28
- height = "2px",
29
- modifiers = [],
30
- } = props;
26
+ const { align, className, height = "2px", width = "auto" } = props;
27
+ const styles = useStyleConfig("HorizontalRule", { align });
28
+ let finalHeight = height;
31
29
 
32
- attributes["style"] = {
33
- width: width,
34
- height: height,
35
- };
36
-
37
- if (align) {
38
- modifiers.push(align);
30
+ if (height.endsWith("%")) {
31
+ console.warn(
32
+ "`HorizontalRule`: For the `height` prop, use a whole number, a `px`" +
33
+ " value, a `em` value, or a `rem` value. Using the default of 2px."
34
+ );
35
+ finalHeight = "2px";
39
36
  }
40
37
 
41
- return (
42
- <hr
43
- className={bem("horizontal-rule", modifiers, "", [className])}
44
- {...attributes}
45
- />
46
- );
38
+ const finalStyles = {
39
+ ...styles,
40
+ height: finalHeight,
41
+ width,
42
+ };
43
+
44
+ return <Box as="hr" className={className} __css={finalStyles} />;
47
45
  }
@@ -1,13 +1,31 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`HorizontalRule Renders the UI snapshot correctly 1`] = `
4
- <hr
5
- className="horizontal-rule "
6
- style={
7
- Object {
8
- "height": "2px",
9
- "width": "auto",
10
- }
11
- }
3
+ exports[`HorizontalRule renders the UI snapshot correctly 1`] = `
4
+ <hr
5
+ className="css-ili6fu"
6
+ />
7
+ `;
8
+
9
+ exports[`HorizontalRule renders the UI snapshot correctly 2`] = `
10
+ <hr
11
+ className="css-1pwp4fu"
12
+ />
13
+ `;
14
+
15
+ exports[`HorizontalRule renders the UI snapshot correctly 3`] = `
16
+ <hr
17
+ className="css-gj8znx"
18
+ />
19
+ `;
20
+
21
+ exports[`HorizontalRule renders the UI snapshot correctly 4`] = `
22
+ <hr
23
+ className="css-ili6fu"
24
+ />
25
+ `;
26
+
27
+ exports[`HorizontalRule renders the UI snapshot correctly 5`] = `
28
+ <hr
29
+ className="css-ili6fu"
12
30
  />
13
31
  `;
@@ -28,8 +28,7 @@ import { getCategory } from "../../utils/componentCategories";
28
28
  parameters={{
29
29
  design: {
30
30
  type: "figma",
31
- url:
32
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A3945",
31
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A3945",
33
32
  },
34
33
  jest: ["Icon.test.tsx"],
35
34
  }}
@@ -45,7 +44,7 @@ import { getCategory } from "../../utils/componentCategories";
45
44
  | Component Version | DS Version |
46
45
  | ----------------- | ---------- |
47
46
  | Added | `0.0.4` |
48
- | Latest | `0.25.1` |
47
+ | Latest | `0.25.4` |
49
48
 
50
49
  <Description of={Icon} />
51
50
 
@@ -100,6 +99,7 @@ import { getCategory } from "../../utils/componentCategories";
100
99
  iconRotation={IconRotationTypes[args.iconRotation]}
101
100
  name={IconNames[args.name]}
102
101
  size={IconSizes[args.size]}
102
+ title={args.title}
103
103
  />
104
104
  )}
105
105
  </Story>
@@ -132,7 +132,7 @@ export const iconRow = (icon, iconType = IconNames, opts = {}) => {
132
132
  key += `-${size}`;
133
133
  }
134
134
  return (
135
- <li key={key} style={{ marginBottom: "var(--space-s)" }}>
135
+ <li key={key} style={{ marginBottom: "var(--nypl-space-s)" }}>
136
136
  <span style={styles}>
137
137
  <Icon
138
138
  name={iconType[icon]}
@@ -186,6 +186,14 @@ export const allIconsType = (list) => (
186
186
  <ul style={{ listStyle: "none" }}>{list}</ul>
187
187
  );
188
188
 
189
+ ## Accessibility
190
+
191
+ For accessibility purposes, every DS `Icon` will render the `svg` element with
192
+ its icon name in the `title` element. The default text in the `title` element
193
+ is the icon's code name. Pass in better descriptive text in the `title` prop
194
+ when using the `Icon` component in your application. This will give screenreaders
195
+ a better descriptive title for the `svg` graphic.
196
+
189
197
  ## Rotation Types
190
198
 
191
199
  Passing an `iconRotation` prop with a value from `IconRotationTypes` allows
@@ -44,6 +44,24 @@ describe("Icon", () => {
44
44
  expect(container.querySelector("svg")).toBeInTheDocument();
45
45
  });
46
46
 
47
+ // NOTE: the svg icon is dynamically generated by the "svgr" package. At build
48
+ // time, it generate the `title` element but it doesn't generate it for tests.
49
+ // In order to test this, we can check the `title` attribute in the svg
50
+ // element itself. Inspect the `Icon` in Storybook to see the `title` element.
51
+ it("renders a title element", () => {
52
+ const { container, rerender } = render(<Icon name={IconNames.Download} />);
53
+ expect(container.querySelector("svg")).toHaveAttribute(
54
+ "title",
55
+ "download icon"
56
+ );
57
+
58
+ rerender(<Icon name={IconNames.Download} title="title content" />);
59
+ expect(container.querySelector("svg")).toHaveAttribute(
60
+ "title",
61
+ "title content"
62
+ );
63
+ });
64
+
47
65
  it("renders an icon based on the child", () => {
48
66
  const { container } = render(
49
67
  <Icon>
@@ -14,6 +14,8 @@ import {
14
14
  import iconSvgs from "./IconSvgs";
15
15
 
16
16
  export interface IconProps {
17
+ /** Optionally pass in additional Chakra-based styles. */
18
+ additionalStyles?: { [key: string]: any };
17
19
  /** Aligns the icon. */
18
20
  align?: IconAlign;
19
21
  /** className that appears in addition to "icon" */
@@ -31,6 +33,10 @@ export interface IconProps {
31
33
  name?: IconNames | LogoNames;
32
34
  /** Sets the icon size. */
33
35
  size?: IconSizes;
36
+ /** For accessibility purposes, the text passed in the `title` prop gets
37
+ * rendered in a `title` element in the SVG. This descriptive text is not
38
+ * visible but is needed for screenreaders to describe the graphic. */
39
+ title?: string;
34
40
  /** Sets the icon variant type. */
35
41
  type?: IconTypes;
36
42
  }
@@ -40,6 +46,7 @@ export interface IconProps {
40
46
  */
41
47
  export default function Icon(props: React.PropsWithChildren<IconProps>) {
42
48
  const {
49
+ additionalStyles = {},
43
50
  align = "none",
44
51
  children,
45
52
  className,
@@ -49,6 +56,7 @@ export default function Icon(props: React.PropsWithChildren<IconProps>) {
49
56
  id = generateUUID(),
50
57
  name,
51
58
  size = IconSizes.Medium,
59
+ title = `${name} icon`,
52
60
  type = IconTypes.Default,
53
61
  } = props;
54
62
  const styles = useStyleConfig("Icon", {
@@ -63,6 +71,7 @@ export default function Icon(props: React.PropsWithChildren<IconProps>) {
63
71
  className,
64
72
  id,
65
73
  role: "img",
74
+ title,
66
75
  };
67
76
  let childSVG = null;
68
77
 
@@ -84,7 +93,13 @@ export default function Icon(props: React.PropsWithChildren<IconProps>) {
84
93
  // render the SVG child with NYPL-theme styling.
85
94
  if (name) {
86
95
  const SvgComponent: any = iconSvgs[name];
87
- return <ChakraIcon as={SvgComponent} {...iconProps} __css={styles} />;
96
+ return (
97
+ <ChakraIcon
98
+ as={SvgComponent}
99
+ {...iconProps}
100
+ __css={{ ...styles, ...additionalStyles }}
101
+ />
102
+ );
88
103
  }
89
104
 
90
105
  // If no `name` prop was passed, we expect a child SVG element to be passed.
@@ -1,11 +1,22 @@
1
1
  /* eslint-disable camelcase */
2
2
  import accessibility_full from "../../../icons/svg/accessibility_full.svg";
3
3
  import accessibility_partial from "../../../icons/svg/accessibility_partial.svg";
4
+ import action_check_circle from "../../../icons/svg/action_check_circle.svg";
5
+ import action_help_default from "../../../icons/svg/action_help_default.svg";
6
+ import action_help_outline from "../../../icons/svg/action_help_outline.svg";
7
+ import action_launch from "../../../icons/svg/action_launch.svg";
4
8
  import arrow from "../../../icons/svg/arrow.svg";
5
9
  import brooklyn from "../../../icons/svg/brooklyn.svg";
6
10
  import check from "../../../icons/svg/check.svg";
7
11
  import clock from "../../../icons/svg/clock.svg";
8
12
  import close from "../../../icons/svg/close.svg";
13
+ import file_type_audio from "../../../icons/svg/file_type_audio.svg";
14
+ import file_type_doc from "../../../icons/svg/file_type_doc.svg";
15
+ import file_type_generic_doc from "../../../icons/svg/file_type_generic_doc.svg";
16
+ import file_type_image from "../../../icons/svg/file_type_image.svg";
17
+ import file_type_pdf from "../../../icons/svg/file_type_pdf.svg";
18
+ import file_type_spreadsheet from "../../../icons/svg/file_type_spreadsheet.svg";
19
+ import file_type_video from "../../../icons/svg/file_type_video.svg";
9
20
  import download from "../../../icons/svg/download.svg";
10
21
  import error_filled from "../../../icons/svg/error_filled.svg";
11
22
  import error_outline from "../../../icons/svg/error_outline.svg";
@@ -42,6 +53,10 @@ import utility_search from "../../../icons/svg/search.svg";
42
53
  export default {
43
54
  accessibility_full,
44
55
  accessibility_partial,
56
+ action_check_circle,
57
+ action_help_default,
58
+ action_help_outline,
59
+ action_launch,
45
60
  arrow,
46
61
  brooklyn,
47
62
  check,
@@ -50,6 +65,13 @@ export default {
50
65
  download,
51
66
  error_filled,
52
67
  error_outline,
68
+ file_type_audio,
69
+ file_type_doc,
70
+ file_type_generic_doc,
71
+ file_type_image,
72
+ file_type_pdf,
73
+ file_type_spreadsheet,
74
+ file_type_video,
53
75
  headset,
54
76
  logo_brooklyn,
55
77
  logo_nypl,
@@ -49,6 +49,10 @@ export enum IconSizes {
49
49
  export enum IconNames {
50
50
  AccessibilityFull = "accessibility_full",
51
51
  AccessibilityPartial = "accessibility_partial",
52
+ ActionCheckCircle = "action_check_circle",
53
+ ActionHelpDefault = "action_help_default",
54
+ ActionHelpOutline = "action_help_outline",
55
+ ActionLaunch = "action_launch",
52
56
  Arrow = "arrow",
53
57
  Check = "check",
54
58
  Clock = "clock",
@@ -56,6 +60,13 @@ export enum IconNames {
56
60
  Download = "download",
57
61
  ErrorFilled = "error_filled",
58
62
  ErrorOutline = "error_outline",
63
+ FileTypeAudio = "file_type_audio",
64
+ FileTypeDoc = "file_type_doc",
65
+ FileTypeGenericDoc = "file_type_generic_doc",
66
+ FileTypeImage = "file_type_image",
67
+ FileTypePdf = "file_type_pdf",
68
+ FileTypeSpreadsheet = "file_type_spreadsheet",
69
+ FileTypeVideo = "file_type_video",
59
70
  Headset = "headset",
60
71
  Minus = "minus",
61
72
  Plus = "plus",
@@ -0,0 +1,220 @@
1
+ import {
2
+ Meta,
3
+ Story,
4
+ Canvas,
5
+ ArgsTable,
6
+ Description,
7
+ } from "@storybook/addon-docs/blocks";
8
+ import { withDesign } from "storybook-addon-designs";
9
+ import { VStack } from "@chakra-ui/react";
10
+
11
+ import Image from "./Image";
12
+ import { ImageRatios, ImageSizes, ImageTypes } from "./ImageTypes";
13
+ import Heading from "../Heading/Heading";
14
+ import { getCategory } from "../../utils/componentCategories";
15
+
16
+ <Meta
17
+ title={getCategory("Image")}
18
+ component={Image}
19
+ decorators={[withDesign]}
20
+ parameters={{
21
+ design: {
22
+ type: "figma",
23
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11896%3A45379",
24
+ },
25
+ jest: ["Image.test.tsx"],
26
+ }}
27
+ argTypes={{
28
+ alt: { table: { disable: true } },
29
+ className: { table: { disable: true } },
30
+ component: { table: { disable: true } },
31
+ }}
32
+ />
33
+
34
+ # Image
35
+
36
+ | Component Version | DS Version |
37
+ | ----------------- | ---------- |
38
+ | Added | `0.0.6` |
39
+ | Latest | `0.25.3` |
40
+
41
+ <Description of={Image} />
42
+
43
+ <p>
44
+ If you want a simple HTML `img` element then don't pass in values for the
45
+ `imageAspectRatio` or `imageSize` props.
46
+ </p>
47
+
48
+ <Canvas>
49
+ <Story
50
+ name="Image Props"
51
+ args={{
52
+ alt: "Alt text",
53
+ imageAspectRatio: ImageRatios.TwoByOne,
54
+ imageCaption: "Image caption",
55
+ imageCredit: "Image credit",
56
+ imageSize: ImageSizes.Medium,
57
+ imageType: ImageTypes.Default,
58
+ src: "https://placeimg.com/400/300/animals",
59
+ }}
60
+ >
61
+ {(args) => <Image {...args} />}
62
+ </Story>
63
+ </Canvas>
64
+
65
+ <ArgsTable story="Image Props" />
66
+
67
+ ## Image Figure
68
+
69
+ By passing in `imageCredit` or `imageCaption`, the `Image` component will
70
+ render an HTML `figure` element and render an `img` element inside with the
71
+ proper props. If no `imageCredit` or `imageCaption` prop values are passed,
72
+ then an `img` element will be rendered with or without wrapper style divs.
73
+
74
+ <Canvas>
75
+ <Story
76
+ name="Figure and figcaption"
77
+ args={{
78
+ alt: "Alt text",
79
+ imageAspectRatio: ImageRatios.ThreeByTwo,
80
+ imageCaption: "Image caption",
81
+ imageCredit: "Image credit",
82
+ imageSize: ImageSizes.Medium,
83
+ imageType: ImageTypes.Default,
84
+ src: "https://placeimg.com/400/300/animals",
85
+ }}
86
+ argTypes={{
87
+ imageAspectRatio: { table: { disable: true } },
88
+ imageCaption: { table: { disable: true } },
89
+ imageCredit: { table: { disable: true } },
90
+ imageSize: { table: { disable: true } },
91
+ imageType: { table: { disable: true } },
92
+ src: { table: { disable: true } },
93
+ }}
94
+ >
95
+ {(args) => <Image {...args} />}
96
+ </Story>
97
+ </Canvas>
98
+
99
+ ## Image Sizes
100
+
101
+ Use the `ImageSizes` prop to set the desired size.
102
+
103
+ <Canvas>
104
+ <Story name="Image Sizes">
105
+ <VStack spacing="xs">
106
+ <Heading id="Small" text="ImageSizes.Small" />
107
+ <Image
108
+ alt="Alt text"
109
+ imageSize={ImageSizes.Small}
110
+ src="https://placeimg.com/400/300/animals"
111
+ />
112
+ <Heading id="Medium" text="ImageSizes.Medium" />
113
+ <Image
114
+ alt="Alt text"
115
+ imageSize={ImageSizes.Medium}
116
+ src="https://placeimg.com/400/300/animals"
117
+ />
118
+ <Heading id="Large" text="ImageSizes.Large" />
119
+ <Image
120
+ alt="Alt text"
121
+ imageSize={ImageSizes.Large}
122
+ src="https://placeimg.com/400/300/animals"
123
+ />
124
+ <Heading id="Default" text="ImageSizes.Default" />
125
+ <Image alt="Alt text" src="https://placeimg.com/400/300/animals" />
126
+ </VStack>
127
+ </Story>
128
+ </Canvas>
129
+
130
+ ## Image Aspect Ratios
131
+
132
+ Use the `imageAspectRatio` prop to set the desired aspect ratio. Note: the
133
+ following example has `imageSize` set to `ImageSizes.Small`.
134
+
135
+ For a better viewing experience, the `Image` components below have been wrapped
136
+ in an element with a fixed width value.
137
+
138
+ <Canvas>
139
+ <Story name="Image Aspect Ratios">
140
+ <VStack spacing="xs" maxWidth="360px" margin="auto">
141
+ <Heading id="fourbythree" text="ImageRatios.FourByThree" />
142
+ <Image
143
+ alt="Alt text"
144
+ imageAspectRatio={ImageRatios.FourByThree}
145
+ src="https://placeimg.com/400/300/animals"
146
+ />
147
+ <Heading id="onebytwo" text="ImageRatios.OneByTwo" />
148
+ <Image
149
+ alt="Alt text"
150
+ imageAspectRatio={ImageRatios.OneByTwo}
151
+ src="https://placeimg.com/400/300/animals"
152
+ />
153
+ <Heading id="original" text="ImageRatios.Original" />
154
+ <Image
155
+ alt="Alt text"
156
+ imageAspectRatio={ImageRatios.Original}
157
+ src="https://placeimg.com/400/300/animals"
158
+ />
159
+ <Heading id="sixteenbynine" text="ImageRatios.SixteenByNine" />
160
+ <Image
161
+ alt="Alt text"
162
+ imageAspectRatio={ImageRatios.SixteenByNine}
163
+ src="https://placeimg.com/400/300/animals"
164
+ />
165
+ <Heading id="square" text="ImageRatios.Square" />
166
+ <Image
167
+ alt="Alt text"
168
+ imageAspectRatio={ImageRatios.Square}
169
+ src="https://placeimg.com/400/300/animals"
170
+ />
171
+ <Heading id="threebyfour" text="ImageRatios.ThreeByFour" />
172
+ <Image
173
+ alt="Alt text"
174
+ imageAspectRatio={ImageRatios.ThreeByFour}
175
+ src="https://placeimg.com/400/300/animals"
176
+ />
177
+ <Heading id="threebytwo" text="ImageRatios.ThreeByTwo" />
178
+ <Image
179
+ alt="Alt text"
180
+ imageAspectRatio={ImageRatios.ThreeByTwo}
181
+ src="https://placeimg.com/400/300/animals"
182
+ />
183
+ <Heading id="twobyone" text="ImageRatios.TwoByOne" />
184
+ <Image
185
+ alt="Alt text"
186
+ imageAspectRatio={ImageRatios.TwoByOne}
187
+ src="https://placeimg.com/400/300/animals"
188
+ />
189
+ </VStack>
190
+ </Story>
191
+ </Canvas>
192
+
193
+ ## Image Types
194
+
195
+ Use the `imageType` prop to get an image variant. Note that to get a perfect
196
+ circle, the `imageAspectRatio` prop _must_ be set to `ImageRatios.Square`.
197
+
198
+ For a better viewing experience, the `Image` components below have been wrapped
199
+ in an element with a fixed width value.
200
+
201
+ <Canvas>
202
+ <Story name="Image Types">
203
+ <VStack spacing="xs" maxWidth="360px" margin="auto">
204
+ <Heading id="default" text="ImageTypes.Default" />
205
+ <Image
206
+ alt="Alt text"
207
+ imageAspectRatio={ImageRatios.Square}
208
+ imageType={ImageTypes.Default}
209
+ src="https://placeimg.com/400/400/animals"
210
+ />
211
+ <Heading id="circle" text="ImageTypes.Circle" />
212
+ <Image
213
+ alt="Alt text"
214
+ imageAspectRatio={ImageRatios.Square}
215
+ imageType={ImageTypes.Circle}
216
+ src="https://placeimg.com/400/400/animals"
217
+ />
218
+ </VStack>
219
+ </Story>
220
+ </Canvas>