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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/README.md +1 -1
  3. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  4. package/dist/components/Button/Button.d.ts +6 -6
  5. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  6. package/dist/components/Card/Card.d.ts +6 -4
  7. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  11. package/dist/components/Form/Form.d.ts +2 -2
  12. package/dist/components/Heading/Heading.d.ts +7 -3
  13. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  16. package/dist/components/Icons/Icon.d.ts +4 -4
  17. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  18. package/dist/components/Icons/IconTypes.d.ts +1 -23
  19. package/dist/components/Image/Image.d.ts +11 -3
  20. package/dist/components/Image/ImageTypes.d.ts +3 -1
  21. package/dist/components/Link/LinkTypes.d.ts +1 -0
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  25. package/dist/components/Modal/Modal.d.ts +0 -4
  26. package/dist/components/Notification/Notification.d.ts +4 -2
  27. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  28. package/dist/components/Radio/Radio.d.ts +6 -5
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  31. package/dist/components/Select/Select.d.ts +5 -2
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  33. package/dist/components/Slider/Slider.d.ts +3 -2
  34. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  35. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  36. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  37. package/dist/components/Table/Table.d.ts +23 -0
  38. package/dist/components/Template/Template.d.ts +8 -3
  39. package/dist/components/Text/Text.d.ts +2 -2
  40. package/dist/components/TextInput/TextInput.d.ts +4 -3
  41. package/dist/components/Toggle/Toggle.d.ts +48 -0
  42. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  43. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  44. package/dist/design-system-react-components.cjs.development.js +5989 -5490
  45. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  48. package/dist/design-system-react-components.esm.js +6057 -5551
  49. package/dist/design-system-react-components.esm.js.map +1 -1
  50. package/dist/index.d.ts +11 -4
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +9 -0
  53. package/dist/theme/components/button.d.ts +0 -12
  54. package/dist/theme/components/card.d.ts +14 -2
  55. package/dist/theme/components/customTable.d.ts +47 -0
  56. package/dist/theme/components/fieldset.d.ts +2 -2
  57. package/dist/theme/components/global.d.ts +1 -1
  58. package/dist/theme/components/heading.d.ts +4 -0
  59. package/dist/theme/components/label.d.ts +1 -1
  60. package/dist/theme/components/link.d.ts +14 -1
  61. package/dist/theme/components/list.d.ts +0 -2
  62. package/dist/theme/components/logo.d.ts +4 -0
  63. package/dist/theme/components/notification.d.ts +8 -4
  64. package/dist/theme/components/searchBar.d.ts +7 -13
  65. package/dist/theme/components/select.d.ts +1 -0
  66. package/dist/theme/components/structuredContent.d.ts +33 -0
  67. package/dist/theme/components/template.d.ts +10 -10
  68. package/dist/theme/components/textInput.d.ts +2 -0
  69. package/dist/theme/components/toggle.d.ts +71 -0
  70. package/dist/theme/foundations/spacing.d.ts +2 -0
  71. package/dist/utils/utils.d.ts +10 -0
  72. package/package.json +2 -3
  73. package/src/__tests__/utils/utils.test.ts +23 -1
  74. package/src/components/Accordion/Accordion.stories.mdx +15 -14
  75. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  76. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  77. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  78. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +50 -14
  79. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +20 -0
  80. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  81. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +198 -0
  82. package/src/components/Button/Button.stories.mdx +93 -48
  83. package/src/components/Button/Button.test.tsx +0 -12
  84. package/src/components/Button/Button.tsx +7 -8
  85. package/src/components/Button/ButtonTypes.tsx +0 -1
  86. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  87. package/src/components/Card/Card.stories.mdx +246 -64
  88. package/src/components/Card/Card.test.tsx +45 -22
  89. package/src/components/Card/Card.tsx +26 -13
  90. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  91. package/src/components/Chakra/Box.stories.mdx +3 -3
  92. package/src/components/Chakra/Center.stories.mdx +5 -5
  93. package/src/components/Chakra/Grid.stories.mdx +14 -17
  94. package/src/components/Chakra/Stack.stories.mdx +2 -2
  95. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  96. package/src/components/Checkbox/Checkbox.tsx +13 -8
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  99. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  100. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  101. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  102. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  103. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  104. package/src/components/DatePicker/DatePicker.test.tsx +8 -6
  105. package/src/components/DatePicker/DatePicker.tsx +10 -6
  106. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  107. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  108. package/src/components/Form/Form.stories.mdx +49 -41
  109. package/src/components/Form/Form.tsx +5 -4
  110. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  111. package/src/components/Heading/Heading.stories.mdx +59 -23
  112. package/src/components/Heading/Heading.test.tsx +82 -18
  113. package/src/components/Heading/Heading.tsx +31 -31
  114. package/src/components/Heading/HeadingTypes.tsx +6 -6
  115. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  116. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  117. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  118. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  119. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  120. package/src/components/Hero/Hero.stories.mdx +72 -53
  121. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  122. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  123. package/src/components/Icons/Icon.stories.mdx +77 -75
  124. package/src/components/Icons/Icon.tsx +4 -5
  125. package/src/components/Icons/IconSvgs.tsx +2 -42
  126. package/src/components/Icons/IconTypes.tsx +1 -24
  127. package/src/components/Image/Image.stories.mdx +214 -104
  128. package/src/components/Image/Image.test.tsx +10 -0
  129. package/src/components/Image/Image.tsx +21 -10
  130. package/src/components/Image/ImageTypes.ts +2 -0
  131. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  132. package/src/components/Label/Label.stories.mdx +21 -20
  133. package/src/components/Link/Link.stories.mdx +103 -53
  134. package/src/components/Link/Link.test.tsx +108 -7
  135. package/src/components/Link/Link.tsx +58 -19
  136. package/src/components/Link/LinkTypes.tsx +1 -0
  137. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  138. package/src/components/List/List.stories.mdx +36 -24
  139. package/src/components/Logo/Logo.stories.mdx +220 -0
  140. package/src/components/Logo/Logo.test.tsx +98 -0
  141. package/src/components/Logo/Logo.tsx +97 -0
  142. package/src/components/Logo/LogoSvgs.tsx +34 -0
  143. package/src/components/Logo/LogoTypes.tsx +32 -0
  144. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  145. package/src/components/Modal/Modal.stories.mdx +20 -5
  146. package/src/components/Modal/Modal.tsx +2 -8
  147. package/src/components/Notification/Notification.stories.mdx +96 -40
  148. package/src/components/Notification/Notification.test.tsx +62 -16
  149. package/src/components/Notification/Notification.tsx +26 -9
  150. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  151. package/src/components/Pagination/Pagination.stories.mdx +18 -8
  152. package/src/components/Pagination/Pagination.tsx +1 -1
  153. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  154. package/src/components/Placeholder/Placeholder.tsx +7 -14
  155. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  156. package/src/components/Radio/Radio.stories.mdx +39 -19
  157. package/src/components/Radio/Radio.tsx +13 -9
  158. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  159. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  160. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  161. package/src/components/SearchBar/SearchBar.Test.tsx +114 -22
  162. package/src/components/SearchBar/SearchBar.stories.mdx +111 -33
  163. package/src/components/SearchBar/SearchBar.tsx +57 -33
  164. package/src/components/Select/Select.stories.mdx +177 -66
  165. package/src/components/Select/Select.test.tsx +2 -2
  166. package/src/components/Select/Select.tsx +22 -12
  167. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  168. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  169. package/src/components/Slider/Slider.stories.mdx +74 -23
  170. package/src/components/Slider/Slider.test.tsx +35 -0
  171. package/src/components/Slider/Slider.tsx +22 -11
  172. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  173. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  174. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  175. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  176. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  177. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  178. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  179. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  180. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  181. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  182. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  183. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  184. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  185. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  186. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  187. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  188. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  189. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  190. package/src/components/Table/Table.stories.mdx +66 -0
  191. package/src/components/Table/Table.test.tsx +60 -0
  192. package/src/components/Table/Table.tsx +116 -0
  193. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  194. package/src/components/Tabs/Tabs.test.tsx +1 -1
  195. package/src/components/Template/Template.stories.mdx +57 -49
  196. package/src/components/Template/Template.test.tsx +65 -5
  197. package/src/components/Template/Template.tsx +35 -5
  198. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  199. package/src/components/Text/Text.stories.mdx +33 -11
  200. package/src/components/Text/Text.tsx +2 -2
  201. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  202. package/src/components/TextInput/TextInput.test.tsx +96 -0
  203. package/src/components/TextInput/TextInput.tsx +12 -8
  204. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  205. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  206. package/src/components/Toggle/Toggle.test.tsx +140 -0
  207. package/src/components/Toggle/Toggle.tsx +123 -0
  208. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  209. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  210. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  211. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  212. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  213. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  214. package/src/docs/Chakra.stories.mdx +5 -8
  215. package/src/docs/Intro.stories.mdx +2 -2
  216. package/src/index.ts +13 -4
  217. package/src/styles/base/_03-base.scss +1 -1
  218. package/src/styles/base/_place-holder.scss +7 -7
  219. package/src/styles.scss +1 -5
  220. package/src/theme/components/breadcrumb.ts +14 -4
  221. package/src/theme/components/button.ts +5 -12
  222. package/src/theme/components/card.ts +9 -7
  223. package/src/theme/components/checkbox.ts +1 -1
  224. package/src/theme/components/customTable.ts +50 -0
  225. package/src/theme/components/datePicker.ts +1 -1
  226. package/src/theme/components/global.ts +7 -7
  227. package/src/theme/components/heading.ts +13 -11
  228. package/src/theme/components/helperErrorText.ts +1 -1
  229. package/src/theme/components/icon.ts +2 -2
  230. package/src/theme/components/image.ts +9 -1
  231. package/src/theme/components/link.ts +17 -5
  232. package/src/theme/components/list.ts +1 -3
  233. package/src/theme/components/logo.ts +54 -0
  234. package/src/theme/components/notification.ts +9 -7
  235. package/src/theme/components/searchBar.ts +7 -13
  236. package/src/theme/components/select.ts +1 -0
  237. package/src/theme/components/statusBadge.ts +1 -1
  238. package/src/theme/components/structuredContent.ts +54 -0
  239. package/src/theme/components/template.ts +10 -10
  240. package/src/theme/components/text.ts +6 -6
  241. package/src/theme/components/textInput.ts +1 -0
  242. package/src/theme/components/toggle.ts +69 -0
  243. package/src/theme/components/videoPlayer.ts +0 -2
  244. package/src/theme/foundations/global.ts +2 -2
  245. package/src/theme/foundations/spacing.ts +3 -0
  246. package/src/theme/foundations/typography.ts +84 -12
  247. package/src/theme/index.ts +8 -0
  248. package/src/utils/componentCategories.ts +4 -2
  249. package/src/utils/utils.ts +17 -0
  250. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  251. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  252. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  253. package/dist/components/Input/Input.d.ts +0 -36
  254. package/dist/components/Input/Input.stories.d.ts +0 -29
  255. package/dist/components/Input/InputTypes.d.ts +0 -6
  256. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  257. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  258. package/dist/helpers/getCSSVariable.d.ts +0 -1
  259. package/dist/interfaces.d.ts +0 -3
  260. package/dist/utils/bem.d.ts +0 -1
  261. package/src/__tests__/utils/bem.test.ts +0 -37
  262. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  263. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  264. package/src/components/CardEdition/CardEdition.tsx +0 -60
  265. package/src/components/CardEdition/_CardEdition.scss +0 -137
  266. package/src/components/Input/Input.stories.tsx +0 -133
  267. package/src/components/Input/Input.test.tsx +0 -266
  268. package/src/components/Input/Input.tsx +0 -81
  269. package/src/components/Input/InputTypes.tsx +0 -8
  270. package/src/components/Input/_Input.scss +0 -78
  271. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  272. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  273. package/src/helpers/getCSSVariable.tsx +0 -5
  274. package/src/interfaces.ts +0 -3
  275. package/src/utils/bem.ts +0 -44
@@ -0,0 +1,220 @@
1
+ import {
2
+ ArgsTable,
3
+ Canvas,
4
+ Description,
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
8
+ import { withDesign } from "storybook-addon-designs";
9
+
10
+ import Logo from "./Logo";
11
+ import { LogoNames, LogoSizes } from "./LogoTypes";
12
+ import logoSvgs from "./LogoSvgs";
13
+ import Heading from "../Heading/Heading";
14
+ import { HeadingLevels } from "../Heading/HeadingTypes";
15
+ import List from "../List/List";
16
+ import { ListTypes } from "../List/ListTypes";
17
+ import SimpleGrid from "../Grid/SimpleGrid";
18
+ import { getCategory } from "../../utils/componentCategories";
19
+ import { getStorybookEnumValues } from "../../utils/utils";
20
+
21
+ export const namesEnumValues = getStorybookEnumValues(LogoNames, "LogoNames");
22
+ export const sizesEnumValues = getStorybookEnumValues(LogoSizes, "LogoSizes");
23
+
24
+ <Meta
25
+ title={getCategory("Logo")}
26
+ component={Logo}
27
+ decorators={[withDesign]}
28
+ parameters={{
29
+ design: {
30
+ type: "figma",
31
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=10734%3A3945",
32
+ },
33
+ jest: ["Logo.test.tsx"],
34
+ }}
35
+ argTypes={{
36
+ children: { table: { disable: true } },
37
+ className: { control: false },
38
+ id: { control: false },
39
+ name: {
40
+ control: { type: "select" },
41
+ options: namesEnumValues.options,
42
+ },
43
+ size: {
44
+ control: { type: "select" },
45
+ table: { defaultValue: { summary: "LogoSizes.Medium" } },
46
+ options: sizesEnumValues.options,
47
+ },
48
+ title: {
49
+ control: false,
50
+ table: { defaultValue: { summary: "`${name} logo`" } },
51
+ },
52
+ }}
53
+ />
54
+
55
+ # Logo
56
+
57
+ | Component Version | DS Version |
58
+ | ----------------- | ---------- |
59
+ | Added | `0.25.9` |
60
+ | Latest | `0.25.9` |
61
+
62
+ <Description of={Logo} />
63
+
64
+ <Canvas withToolbar>
65
+ <Story
66
+ name="Logo with Controls"
67
+ args={{
68
+ additionalStyles: undefined,
69
+ className: undefined,
70
+ decorative: true,
71
+ id: "logo-id",
72
+ name: "LogoNames.NYPLBlack",
73
+ size: "LogoSizes.Large",
74
+ title: undefined,
75
+ }}
76
+ >
77
+ {(args) => (
78
+ <div
79
+ style={
80
+ args.name.indexOf("White") !== -1
81
+ ? {
82
+ backgroundColor: "var(--nypl-colors-ui-gray-xdark)",
83
+ display: "inline-block",
84
+ padding: "var(--nypl-space-l)",
85
+ }
86
+ : undefined
87
+ }
88
+ >
89
+ <Logo
90
+ name={namesEnumValues.getValue(args.name)}
91
+ size={sizesEnumValues.getValue(args.size)}
92
+ title={args.title}
93
+ />
94
+ </div>
95
+ )}
96
+ </Story>
97
+ </Canvas>
98
+
99
+ <ArgsTable story="Logo with Controls" />
100
+
101
+ export const logoRow = (logo, opts = {}) => {
102
+ // We'll use this setup function to render all the logos in a list item.
103
+ // Some logos display better with a dark background.
104
+ const styles = { textAlign: "center" };
105
+ const { size = LogoSizes.Large, displayValue } = opts;
106
+ let key = logo;
107
+ if (logo.indexOf("White") !== -1) {
108
+ styles.backgroundColor = "var(--nypl-colors-ui-gray-xdark)";
109
+ styles.paddingBottom = "32px";
110
+ styles.paddingTop = "32px";
111
+ styles.color = "var(--nypl-colors-ui-white)";
112
+ }
113
+ if (size !== LogoSizes.Large) {
114
+ key += `-${size}`;
115
+ }
116
+ return (
117
+ <div style={styles} key={key}>
118
+ <Heading level={HeadingLevels.Four}>{displayValue}</Heading>
119
+ <Logo name={LogoNames[logo]} size={size} />
120
+ </div>
121
+ );
122
+ };
123
+ export const logos = [];
124
+ export const sizes = [];
125
+ for (const logo in LogoNames) {
126
+ logos.push(logoRow(logo, { displayValue: `LogoNames.${logo}` }));
127
+ }
128
+ for (const logoSize in LogoSizes) {
129
+ sizes.push(
130
+ logoRow("NYPLBlack", {
131
+ displayValue: `LogoSizes.${logoSize}`,
132
+ size: LogoSizes[logoSize],
133
+ })
134
+ );
135
+ }
136
+
137
+ export const allLogosGrid = (list) => (
138
+ <SimpleGrid columns={1}>{list}</SimpleGrid>
139
+ );
140
+
141
+ ## Accessibility
142
+
143
+ For accessibility purposes, every DS `Logo` will render the `svg` element with
144
+ its `svg` file name in the `title` element. The default text in the `title` element
145
+ is the logo's code name. Pass in better descriptive text in the `title` prop
146
+ when using the `Logo` component in your application. This will give screenreaders
147
+ a better descriptive title for the `svg` graphic.
148
+
149
+ ## All Logos
150
+
151
+ The `Logo` component contains the logos most commonly used by are listed available
152
+ logos are listed in the `LogoNames` enum in `src/components/Logos/LogoTypes.tsx`.
153
+
154
+ If you feel a necessary logo should be added to the `Logo` component, please reach out
155
+ to the DS team.
156
+
157
+ <Canvas withToolbar>
158
+ <Story name="All Logos">{allLogosGrid(logos)}</Story>
159
+ </Canvas>
160
+
161
+ ## Logo Sizes
162
+
163
+ Update the size of the `Logo` component by passing the `size` prop with a value from
164
+ `LogoSizes`. The `LogoSizes` enum can be found in`src/components/Logo/LogoTypes.tsx`.
165
+
166
+ Note: `LogoSizes.Default` sets the width to `100%` and the logo will expand to
167
+ fill the full width of the parent element.
168
+
169
+ ```jsx
170
+ // Example
171
+ <Logo name={LogoNames.NYPLBlack} size={LogoSizes.Large} />
172
+ ```
173
+
174
+ <Canvas>
175
+ <Story name="Logo Sizes">{allLogosGrid(sizes)}</Story>
176
+ </Canvas>
177
+
178
+ ## Custom Logos
179
+
180
+ If you'd like to pass a custom `svg` to your application, you can pass it a
181
+ child to the `Logo` component.
182
+
183
+ ```jsx
184
+ <Logo {...props}>
185
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192.756 192.756">
186
+ <g fill-rule="evenodd" clip-rule="evenodd">
187
+ <path fill="#fff" d="M0 0h192.756v192.756H0V0z" />
188
+ <path
189
+ d="M59.73 117.578c-9.859-4.912-23.261-15.887-23.413-27.06C36.149 78.129 44.451 75.087 50 75.087c5.701 0 8.286 3.345 10.637 5.777 2.352-2.433 4.936-5.777 10.637-5.777 5.549 0 13.851 3.042 13.682 15.431-.151 11.173-13.553 22.148-23.412 27.06-.35.174-.629.262-.907.262s-.557-.088-.907-.262z"
190
+ fill="#c23c40"
191
+ />
192
+ <path d="M184.252 78.225c-.027 1.111-.355 1.921-.799 2.399-.871.945-3.1 1.067-4.283.854-.668-.12-1.309-.167-1.66-.137-1.551.136-2.398 1.115-3.242 2.45l-10.377 16.423-.154 6.727c-.033 1.535.287 2.881 2.066 2.799l2.865-.135c1.725-.08 3.35 1.029 3.4 2.867.064 2.359-1.807 3.393-3.943 3.275-1.338-.072-2.559-.275-3.666-.477-2.355-.428-3.977-.279-6.332 0-2.189.262-3.879.43-5.055.4-1.895-.045-3.725-.988-3.91-2.957-.178-1.898 1.297-3.191 3.186-3.041l2.5.199c.963.076 2.232-.406 2.256-1.533l.152-7.555-10.803-17.373c-.588-.948-1.52-1.538-2.42-1.877-1.156-.435-2.35-.464-3.568-.309-.988.125-1.16.01-1.414-.001-2.166-.093-3.1-1.048-2.988-3.064.139-2.505 1.543-2.885 3.936-2.885.412 0 1.391.005 3.344.285 1.43.206 2.609.099 3.531.067 2.436-.083 4.973-.545 7.377-.479 1.334.037 2.285.338 2.943.667.92.459 1.506 1.161 1.473 2.348-.031 1.144-.484 2.161-1.139 2.645-.496.367-1.848.417-2.902.417-1.92-.046-1.844 1.094-1.24 1.651l7.008 11.204 7.336-11.487c.148-.59.916-1.602-1.146-1.365-.637.073-.715.087-1.48.064-1.1-.033-1.854-.247-2.266-.544-1.348-.974-1.18-1.916-.943-3.322.17-1.019.986-1.48 1.877-1.744.928-.275 1.896-.259 2.871-.267 1.105-.009 2.221.111 3.295.272 1.99.297 3.414.306 5.398.066 1.379-.167 3.006-.5 4.559-.488 1.062.008 2.092.056 2.984.551.867.484 1.4 1.278 1.373 2.41zM31.561 112.531c-.116 2.684-2.242 2.799-4.345 2.799-2.14 0-4.302-.387-6.455-.387-2.396 0-4.788.17-7.178.396-2.739.262-4.681-.342-4.576-2.869.07-1.703 1.047-2.818 3.117-2.814l2.783.004c1.497.002 2.085-1.572 2.082-2.721l-.098-23.305c-.004-1.258-.422-2.46-1.917-2.431l-3.169.064c-2.091.042-3.322-1.33-3.301-3.214.026-2.372 1.934-2.958 3.873-2.897.678.021 2.127.043 3.023.136 1.53.157 3.13.141 4.67.141 2.369 0 4.682-.372 7.012-.372 2.197 0 4.145.564 4.274 3.233.078 1.624-1.636 2.807-3.479 2.776l-2.155-.035c-1.634-.027-2.604 1.158-2.587 2.501l.294 23.462c.028 2.24 1.216 2.869 3.008 2.85l2.109-.025c1.58-.02 3.098.777 3.015 2.708zM135.311 78.065c-.084 2.73-1.73 3.344-4.244 3.344 0-.041-4.09-.461-4.09 1.686v26.908c0 3.244-1.57 6.314-5.01 6.314-2.217 0-4.641-1.143-5.557-3.271l-12.846-29.84-.061 23.363c-.004 1.895.496 2.963 2.393 2.908l2.344-.066c2.098-.061 3.543 1.082 3.482 3.266-.066 2.418-1.879 2.932-3.93 2.932-2.467 0-4.818-.783-7.248-.666-2.58.123-5.081.484-7.668.484-2.227 0-3.915-.693-3.915-3.283 0-2.166 1.352-2.596 3.254-2.637l2.58-.055c1.54-.031 2.489-.662 2.489-1.975V82.78c0-1.262-.493-1.895-2.204-1.835l-2.213.079c-2.608.092-3.612-.421-3.543-3.023.061-2.28 1.595-3.273 4.478-3.052 1.569.12 3.148.301 4.722.301 1.721 0 3.434-.042 5.148-.042 2.891 0 4.029 1.753 5.182 4.37l11.777 26.751V83.664c0-1.012-.412-1.794-.732-2.11-.322-.316-.822-.481-1.475-.478l-2.693.019c-1.971.012-3.658-.844-3.623-2.685.055-3.006 2.82-3.496 5.285-3.399 2.385.094 4.965.742 7.32.667 2.227-.071 4.461-.646 6.697-.533 2.885.147 3.951 1.244 3.901 2.92zM179.455 107.746c1.111 0 2.096.396 2.951 1.186.896.832 1.346 1.836 1.346 3.012 0 1.426-.506 2.523-1.518 3.297a4.258 4.258 0 0 1-2.643.902h-.211c-1.004 0-1.926-.42-2.766-1.26-.838-.84-1.258-1.791-1.258-2.852v-.174c0-1.16.398-2.135 1.197-2.926.801-.788 1.767-1.185 2.902-1.185zm.408 3.951c.346 0 .615-.082.809-.246.193-.166.291-.363.291-.594a.77.77 0 0 0-.266-.58c-.178-.164-.422-.246-.736-.246h-1.543v1.666h1.445zm-.308-3.345c-.814 0-1.576.279-2.283.84-.891.699-1.334 1.646-1.334 2.84 0 .914.359 1.742 1.08 2.486.721.746 1.533 1.117 2.438 1.117h.148c.906 0 1.723-.367 2.451-1.104s1.092-1.6 1.092-2.588c0-.971-.359-1.812-1.08-2.523-.719-.713-1.557-1.068-2.512-1.068zm-1.741 1.171h2.221c.504 0 .902.141 1.199.42.264.256.395.561.395.914 0 .338-.125.633-.377.883-.25.252-.6.377-1.043.377l-.174-.012 1.408 2.172h-.703l-1.359-2.074h-.963v2.074h-.604v-4.754z" />
193
+ </g>
194
+ </svg>
195
+ </Logo>
196
+ ```
197
+
198
+ <Canvas>
199
+ <Story
200
+ name="Custom Logos"
201
+ args={{
202
+ size: LogoSizes.Large,
203
+ }}
204
+ >
205
+ {(args) => (
206
+ <Logo {...args}>
207
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192.756 192.756">
208
+ <g fill-rule="evenodd" clip-rule="evenodd">
209
+ <path fill="#fff" d="M0 0h192.756v192.756H0V0z" />
210
+ <path
211
+ d="M59.73 117.578c-9.859-4.912-23.261-15.887-23.413-27.06C36.149 78.129 44.451 75.087 50 75.087c5.701 0 8.286 3.345 10.637 5.777 2.352-2.433 4.936-5.777 10.637-5.777 5.549 0 13.851 3.042 13.682 15.431-.151 11.173-13.553 22.148-23.412 27.06-.35.174-.629.262-.907.262s-.557-.088-.907-.262z"
212
+ fill="#c23c40"
213
+ />
214
+ <path d="M184.252 78.225c-.027 1.111-.355 1.921-.799 2.399-.871.945-3.1 1.067-4.283.854-.668-.12-1.309-.167-1.66-.137-1.551.136-2.398 1.115-3.242 2.45l-10.377 16.423-.154 6.727c-.033 1.535.287 2.881 2.066 2.799l2.865-.135c1.725-.08 3.35 1.029 3.4 2.867.064 2.359-1.807 3.393-3.943 3.275-1.338-.072-2.559-.275-3.666-.477-2.355-.428-3.977-.279-6.332 0-2.189.262-3.879.43-5.055.4-1.895-.045-3.725-.988-3.91-2.957-.178-1.898 1.297-3.191 3.186-3.041l2.5.199c.963.076 2.232-.406 2.256-1.533l.152-7.555-10.803-17.373c-.588-.948-1.52-1.538-2.42-1.877-1.156-.435-2.35-.464-3.568-.309-.988.125-1.16.01-1.414-.001-2.166-.093-3.1-1.048-2.988-3.064.139-2.505 1.543-2.885 3.936-2.885.412 0 1.391.005 3.344.285 1.43.206 2.609.099 3.531.067 2.436-.083 4.973-.545 7.377-.479 1.334.037 2.285.338 2.943.667.92.459 1.506 1.161 1.473 2.348-.031 1.144-.484 2.161-1.139 2.645-.496.367-1.848.417-2.902.417-1.92-.046-1.844 1.094-1.24 1.651l7.008 11.204 7.336-11.487c.148-.59.916-1.602-1.146-1.365-.637.073-.715.087-1.48.064-1.1-.033-1.854-.247-2.266-.544-1.348-.974-1.18-1.916-.943-3.322.17-1.019.986-1.48 1.877-1.744.928-.275 1.896-.259 2.871-.267 1.105-.009 2.221.111 3.295.272 1.99.297 3.414.306 5.398.066 1.379-.167 3.006-.5 4.559-.488 1.062.008 2.092.056 2.984.551.867.484 1.4 1.278 1.373 2.41zM31.561 112.531c-.116 2.684-2.242 2.799-4.345 2.799-2.14 0-4.302-.387-6.455-.387-2.396 0-4.788.17-7.178.396-2.739.262-4.681-.342-4.576-2.869.07-1.703 1.047-2.818 3.117-2.814l2.783.004c1.497.002 2.085-1.572 2.082-2.721l-.098-23.305c-.004-1.258-.422-2.46-1.917-2.431l-3.169.064c-2.091.042-3.322-1.33-3.301-3.214.026-2.372 1.934-2.958 3.873-2.897.678.021 2.127.043 3.023.136 1.53.157 3.13.141 4.67.141 2.369 0 4.682-.372 7.012-.372 2.197 0 4.145.564 4.274 3.233.078 1.624-1.636 2.807-3.479 2.776l-2.155-.035c-1.634-.027-2.604 1.158-2.587 2.501l.294 23.462c.028 2.24 1.216 2.869 3.008 2.85l2.109-.025c1.58-.02 3.098.777 3.015 2.708zM135.311 78.065c-.084 2.73-1.73 3.344-4.244 3.344 0-.041-4.09-.461-4.09 1.686v26.908c0 3.244-1.57 6.314-5.01 6.314-2.217 0-4.641-1.143-5.557-3.271l-12.846-29.84-.061 23.363c-.004 1.895.496 2.963 2.393 2.908l2.344-.066c2.098-.061 3.543 1.082 3.482 3.266-.066 2.418-1.879 2.932-3.93 2.932-2.467 0-4.818-.783-7.248-.666-2.58.123-5.081.484-7.668.484-2.227 0-3.915-.693-3.915-3.283 0-2.166 1.352-2.596 3.254-2.637l2.58-.055c1.54-.031 2.489-.662 2.489-1.975V82.78c0-1.262-.493-1.895-2.204-1.835l-2.213.079c-2.608.092-3.612-.421-3.543-3.023.061-2.28 1.595-3.273 4.478-3.052 1.569.12 3.148.301 4.722.301 1.721 0 3.434-.042 5.148-.042 2.891 0 4.029 1.753 5.182 4.37l11.777 26.751V83.664c0-1.012-.412-1.794-.732-2.11-.322-.316-.822-.481-1.475-.478l-2.693.019c-1.971.012-3.658-.844-3.623-2.685.055-3.006 2.82-3.496 5.285-3.399 2.385.094 4.965.742 7.32.667 2.227-.071 4.461-.646 6.697-.533 2.885.147 3.951 1.244 3.901 2.92zM179.455 107.746c1.111 0 2.096.396 2.951 1.186.896.832 1.346 1.836 1.346 3.012 0 1.426-.506 2.523-1.518 3.297a4.258 4.258 0 0 1-2.643.902h-.211c-1.004 0-1.926-.42-2.766-1.26-.838-.84-1.258-1.791-1.258-2.852v-.174c0-1.16.398-2.135 1.197-2.926.801-.788 1.767-1.185 2.902-1.185zm.408 3.951c.346 0 .615-.082.809-.246.193-.166.291-.363.291-.594a.77.77 0 0 0-.266-.58c-.178-.164-.422-.246-.736-.246h-1.543v1.666h1.445zm-.308-3.345c-.814 0-1.576.279-2.283.84-.891.699-1.334 1.646-1.334 2.84 0 .914.359 1.742 1.08 2.486.721.746 1.533 1.117 2.438 1.117h.148c.906 0 1.723-.367 2.451-1.104s1.092-1.6 1.092-2.588c0-.971-.359-1.812-1.08-2.523-.719-.713-1.557-1.068-2.512-1.068zm-1.741 1.171h2.221c.504 0 .902.141 1.199.42.264.256.395.561.395.914 0 .338-.125.633-.377.883-.25.252-.6.377-1.043.377l-.174-.012 1.408 2.172h-.703l-1.359-2.074h-.963v2.074h-.604v-4.754z" />
215
+ </g>
216
+ </svg>
217
+ </Logo>
218
+ )}
219
+ </Story>
220
+ </Canvas>
@@ -0,0 +1,98 @@
1
+ import * as React from "react";
2
+ import { render } from "@testing-library/react";
3
+ import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
5
+
6
+ import Logo from "./Logo";
7
+ import { LogoNames, LogoSizes } from "./LogoTypes";
8
+
9
+ describe("Logo Accessibility", () => {
10
+ it("passes axe accessibility test", async () => {
11
+ const { container } = render(<Logo name={LogoNames.NYPLBlack} />);
12
+ expect(await axe(container)).toHaveNoViolations();
13
+ });
14
+ });
15
+
16
+ describe("Logo", () => {
17
+ it("consoles a warning if both name and children are passed to Logo", () => {
18
+ const warn = jest.spyOn(console, "warn");
19
+ render(
20
+ <Logo name={LogoNames.NYPLBlack}>
21
+ <svg viewBox="0 0 24 14" xmlns="http://www.w3.org/2000/svg">
22
+ <path
23
+ fillRule="evenodd"
24
+ clipRule="evenodd"
25
+ d="M10.526 12.871L.263 1.676 1.737.324 12 11.52 22.263.324l1.474 1.352L13.474 12.87a2 2 0 01-2.948 0z"
26
+ />
27
+ </svg>
28
+ </Logo>
29
+ );
30
+ expect(warn).toHaveBeenCalledWith(
31
+ "Logo accepts either a `name` prop or an `svg` element child. It can not accept both."
32
+ );
33
+ });
34
+
35
+ it("consoles a warning if both name and children are not passed", () => {
36
+ const warn = jest.spyOn(console, "warn");
37
+ render(<Logo />);
38
+ expect(warn).toHaveBeenCalledWith(
39
+ "Pass a logo `name` prop or an SVG child to `Logo` to ensure a logo appears."
40
+ );
41
+ });
42
+
43
+ it("renders a logo based on the logo `name` prop", () => {
44
+ const { container } = render(<Logo name={LogoNames.NYPLBlack} />);
45
+ expect(container.querySelector("svg")).toBeInTheDocument();
46
+ });
47
+
48
+ // NOTE: the svg logo is dynamically generated by the "svgr" package. At build
49
+ // time, it generate the `title` element but it doesn't generate it for tests.
50
+ // In order to test this, we can check the `title` attribute in the svg
51
+ // element itself. Inspect the `Logo` in Storybook to see the `title` element.
52
+ it("renders a title element", () => {
53
+ const { container, rerender } = render(<Logo name={LogoNames.NYPLBlack} />);
54
+ expect(container.querySelector("svg")).toHaveAttribute(
55
+ "title",
56
+ "logo_nypl_full_black logo"
57
+ );
58
+
59
+ rerender(<Logo name={LogoNames.NYPLBlack} title="title content" />);
60
+ expect(container.querySelector("svg")).toHaveAttribute(
61
+ "title",
62
+ "title content"
63
+ );
64
+ });
65
+
66
+ it("renders a logo based on the child", () => {
67
+ const { container } = render(
68
+ <Logo>
69
+ <svg viewBox="0 0 24 14" xmlns="http://www.w3.org/2000/svg">
70
+ <path
71
+ fillRule="evenodd"
72
+ clipRule="evenodd"
73
+ d="M10.526 12.871L.263 1.676 1.737.324 12 11.52 22.263.324l1.474 1.352L13.474 12.87a2 2 0 01-2.948 0z"
74
+ />
75
+ </svg>
76
+ </Logo>
77
+ );
78
+ expect(container.querySelector("svg")).toBeInTheDocument();
79
+ });
80
+
81
+ it("renders the UI snapshot correctly", () => {
82
+ const standard = renderer
83
+ .create(<Logo id="test-logo" name={LogoNames.NYPLBlack} />)
84
+ .toJSON();
85
+ const withCustomSize = renderer
86
+ .create(
87
+ <Logo
88
+ id="test-logo-size"
89
+ name={LogoNames.NYPLBlack}
90
+ size={LogoSizes.Large}
91
+ />
92
+ )
93
+ .toJSON();
94
+
95
+ expect(standard).toMatchSnapshot();
96
+ expect(withCustomSize).toMatchSnapshot();
97
+ });
98
+ });
@@ -0,0 +1,97 @@
1
+ import * as React from "react";
2
+ import { Icon as ChakraIcon, Box, useStyleConfig } from "@chakra-ui/react";
3
+
4
+ import generateUUID from "../../helpers/generateUUID";
5
+ import { LogoNames, LogoSizes } from "./LogoTypes";
6
+ import logoSvgs from "./LogoSvgs";
7
+
8
+ export interface LogoProps {
9
+ /** Optionally pass in additional Chakra-based styles. */
10
+ additionalStyles?: { [key: string]: any };
11
+ /** Optional className that will be added to the parent element */
12
+ className?: string;
13
+ /** Logos designated as decorative will be ignored by screenreaders. False
14
+ * by default. */
15
+ decorative?: boolean;
16
+ /** ID that other components can cross reference for accessibility purposes */
17
+ id?: string;
18
+ /** The name of the logo you want to use. */
19
+ name?: LogoNames;
20
+ /** Sets the logo size. */
21
+ size?: LogoSizes;
22
+ /** For accessibility purposes, the text passed in the `title` prop gets
23
+ * rendered in a `title` element in the SVG. This descriptive text is not
24
+ * visible but is needed for screenreaders to describe the graphic. */
25
+ title?: string;
26
+ }
27
+
28
+ /**
29
+ * The `Logo` component renders SVG-based logos and color variants that are
30
+ * commonly used by the New York Public Library.
31
+ */
32
+ export default function Logo(props: React.PropsWithChildren<LogoProps>) {
33
+ const {
34
+ additionalStyles = {},
35
+ children,
36
+ className,
37
+ decorative = false,
38
+ id = generateUUID(),
39
+ name,
40
+ size = LogoSizes.Medium,
41
+ title = `${name} logo`,
42
+ } = props;
43
+ const styles = useStyleConfig("Logo", {
44
+ size,
45
+ });
46
+ const logoProps = {
47
+ "aria-hidden": decorative,
48
+ className,
49
+ id,
50
+ role: "img",
51
+ title,
52
+ };
53
+ let childSVG = null;
54
+
55
+ // Component prop validation
56
+ if (name && children) {
57
+ console.warn(
58
+ "Logo accepts either a `name` prop or an `svg` element child. It can not accept both."
59
+ );
60
+ return null;
61
+ } else if (!name && !children) {
62
+ console.warn(
63
+ "Pass a logo `name` prop or an SVG child to `Logo` to ensure a logo appears."
64
+ );
65
+ return null;
66
+ }
67
+
68
+ // The user wants to render an existing logo. Load the logo and render it
69
+ // as a component through Chakra's Icon component. Otherwise, we're going to
70
+ // render the SVG child with NYPL-theme styling.
71
+ if (name) {
72
+ const SvgComponent: any = logoSvgs[name];
73
+ return (
74
+ <ChakraIcon
75
+ as={SvgComponent}
76
+ {...logoProps}
77
+ __css={{ ...styles, ...additionalStyles }}
78
+ />
79
+ );
80
+ }
81
+
82
+ // If no `name` prop was passed, we expect a child SVG element to be passed.
83
+ // Apply logo props to the SVG child.
84
+ if (
85
+ (children as JSX.Element).type === "svg" ||
86
+ (children as JSX.Element).props.type === "svg" ||
87
+ (children as JSX.Element).props.mdxType === "svg"
88
+ ) {
89
+ childSVG = React.cloneElement(children as JSX.Element, {
90
+ ...logoProps,
91
+ });
92
+ } else {
93
+ console.warn("You must pass an `svg` element to the `Logo` component.");
94
+ }
95
+
96
+ return <Box __css={styles}>{childSVG}</Box>;
97
+ }
@@ -0,0 +1,34 @@
1
+ /* eslint-disable camelcase */
2
+ import logo_bpl_black from "../../../icons/svg/logo_bpl_black.svg";
3
+ import logo_lpa_color from "../../../icons/svg/logo_lpa_color.svg";
4
+ import logo_lpa_white from "../../../icons/svg/logo_lpa_white.svg";
5
+ import logo_nypl_full_black from "../../../icons/svg/logo_nypl_full_black.svg";
6
+ import logo_nypl_full_white from "../../../icons/svg/logo_nypl_full_white.svg";
7
+ import logo_nypl_lion_black from "../../../icons/svg/logo_nypl_lion_black.svg";
8
+ import logo_nypl_lion_white from "../../../icons/svg/logo_nypl_lion_white.svg";
9
+ import logo_qpl_alt_black from "../../../icons/svg/logo_qpl_alt_black.svg";
10
+ import logo_qpl_color from "../../../icons/svg/logo_qpl_color.svg";
11
+ import logo_schomburg_circle_color from "../../../icons/svg/logo_schomburg_circle_color.svg";
12
+ import logo_schomburg_color from "../../../icons/svg/logo_schomburg_color.svg";
13
+ import logo_simplye_black from "../../../icons/svg/logo_simplye_black.svg";
14
+ import logo_simplye_color from "../../../icons/svg/logo_simplye_color.svg";
15
+ import logo_snfl_black from "../../../icons/svg/logo_snfl_black.svg";
16
+ import logo_snfl_white from "../../../icons/svg/logo_snfl_white.svg";
17
+
18
+ export default {
19
+ logo_bpl_black,
20
+ logo_lpa_color,
21
+ logo_lpa_white,
22
+ logo_nypl_full_black,
23
+ logo_nypl_full_white,
24
+ logo_nypl_lion_white,
25
+ logo_nypl_lion_black,
26
+ logo_qpl_alt_black,
27
+ logo_qpl_color,
28
+ logo_schomburg_circle_color,
29
+ logo_schomburg_color,
30
+ logo_simplye_black,
31
+ logo_simplye_color,
32
+ logo_snfl_black,
33
+ logo_snfl_white,
34
+ };
@@ -0,0 +1,32 @@
1
+ export enum LogoColors {
2
+ Default = "",
3
+ UiBlack = "ui.black",
4
+ UiWhite = "ui.white",
5
+ }
6
+
7
+ export enum LogoSizes {
8
+ ExtraExtraSmall = "xxsmall",
9
+ ExtraSmall = "xsmall",
10
+ Small = "small",
11
+ Medium = "medium",
12
+ Large = "large",
13
+ Default = "default",
14
+ }
15
+
16
+ export enum LogoNames {
17
+ BrooklynPublicLibraryBlack = "logo_bpl_black",
18
+ LPAColor = "logo_lpa_color",
19
+ LPAWhite = "logo_lpa_white",
20
+ NYPLBlack = "logo_nypl_full_black",
21
+ NYPLWhite = "logo_nypl_full_white",
22
+ NYPLLionBlack = "logo_nypl_lion_black",
23
+ NYPLLionWhite = "logo_nypl_lion_white",
24
+ QueensPublicLibraryColor = "logo_qpl_color",
25
+ QueensPublicLibraryAltBlack = "logo_qpl_alt_black",
26
+ SchomburgColor = "logo_schomburg_color",
27
+ SchomburgCircleColor = "logo_schomburg_circle_color",
28
+ SimplyEColor = "logo_simplye_color",
29
+ SimplyEBlack = "logo_simplye_black",
30
+ SNFLBlack = "logo_snfl_black",
31
+ SNFLWhite = "logo_snfl_white",
32
+ }
@@ -0,0 +1,71 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Logo renders the UI snapshot correctly 1`] = `
4
+ <svg
5
+ aria-hidden={false}
6
+ className="chakra-icon css-onkibi"
7
+ focusable={false}
8
+ id="test-logo"
9
+ role="img"
10
+ title="logo_nypl_full_black logo"
11
+ viewBox="0 0 24 24"
12
+ >
13
+ <g
14
+ stroke="currentColor"
15
+ strokeWidth="1.5"
16
+ >
17
+ <path
18
+ d="M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"
19
+ fill="none"
20
+ strokeLinecap="round"
21
+ />
22
+ <path
23
+ d="M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"
24
+ fill="currentColor"
25
+ strokeLinecap="round"
26
+ />
27
+ <circle
28
+ cx="12"
29
+ cy="12"
30
+ fill="none"
31
+ r="11.25"
32
+ strokeMiterlimit="10"
33
+ />
34
+ </g>
35
+ </svg>
36
+ `;
37
+
38
+ exports[`Logo renders the UI snapshot correctly 2`] = `
39
+ <svg
40
+ aria-hidden={false}
41
+ className="chakra-icon css-onkibi"
42
+ focusable={false}
43
+ id="test-logo-size"
44
+ role="img"
45
+ title="logo_nypl_full_black logo"
46
+ viewBox="0 0 24 24"
47
+ >
48
+ <g
49
+ stroke="currentColor"
50
+ strokeWidth="1.5"
51
+ >
52
+ <path
53
+ d="M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"
54
+ fill="none"
55
+ strokeLinecap="round"
56
+ />
57
+ <path
58
+ d="M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"
59
+ fill="currentColor"
60
+ strokeLinecap="round"
61
+ />
62
+ <circle
63
+ cx="12"
64
+ cy="12"
65
+ fill="none"
66
+ r="11.25"
67
+ strokeMiterlimit="10"
68
+ />
69
+ </g>
70
+ </svg>
71
+ `;
@@ -1,11 +1,12 @@
1
1
  import { useState } from "react";
2
2
  import {
3
- Meta,
4
- Story,
5
3
  ArgsTable,
6
4
  Canvas,
7
5
  Description,
8
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
9
+
9
10
  import Modal from "./Modal";
10
11
  import Button from "../Button/Button";
11
12
  import { getCategory } from "../../utils/componentCategories";
@@ -14,7 +15,12 @@ import { getCategory } from "../../utils/componentCategories";
14
15
  title={getCategory("Modal")}
15
16
  component={Modal}
16
17
  argTypes={{
18
+ blockName: { control: false },
17
19
  children: { table: { disable: true } },
20
+ className: { control: false },
21
+ id: { control: false },
22
+ modifiers: { control: false },
23
+ open: { description: "Only used in Storybook." },
18
24
  }}
19
25
  parameters={{
20
26
  jest: ["Modal.test.tsx"],
@@ -119,12 +125,21 @@ export const ModalStory = (args) => {
119
125
  };
120
126
 
121
127
  <Canvas withToolbar>
122
- <Story name="Basic" args={{ open: false }}>
128
+ <Story
129
+ name="Modal"
130
+ args={{
131
+ blockName: undefined,
132
+ className: undefined,
133
+ id: "modal-id",
134
+ modifiers: undefined,
135
+ open: false,
136
+ }}
137
+ >
123
138
  {(args) => <ModalStory {...args} />}
124
139
  </Story>
125
140
  </Canvas>
126
141
 
127
- <ArgsTable story="Basic" />
142
+ <ArgsTable story="Modal" />
128
143
 
129
144
  ## Code Implementation
130
145
 
@@ -1,15 +1,10 @@
1
1
  import * as React from "react";
2
- import bem from "../../utils/bem";
3
2
 
4
3
  export interface ModalProps {
5
- /** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
6
- blockName?: string;
7
4
  /** ClassName that appears in addition to "modal" */
8
5
  className?: string;
9
6
  /** ID that other components can cross reference for accessibility purposes */
10
7
  id?: string;
11
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
12
- modifiers?: string[];
13
8
  }
14
9
 
15
10
  /** Full-screen modal that appears on top of the body of the page. */
@@ -23,14 +18,13 @@ export default class Modal extends React.Component<ModalProps, any> {
23
18
  }
24
19
 
25
20
  render() {
26
- const { modifiers = [], blockName, id, className } = this.props;
27
- const baseClass = "modal";
21
+ const { id, className } = this.props;
28
22
 
29
23
  return (
30
24
  <div
31
25
  // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
32
26
  tabIndex={0}
33
- className={bem(baseClass, modifiers, blockName, [className])}
27
+ className={`modal ${className}`}
34
28
  id={id}
35
29
  >
36
30
  {this.props.children}