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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/README.md +1 -1
  3. package/dist/components/Button/Button.d.ts +6 -6
  4. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  5. package/dist/components/Card/Card.d.ts +6 -4
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  7. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  8. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  9. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  10. package/dist/components/Form/Form.d.ts +2 -2
  11. package/dist/components/Heading/Heading.d.ts +7 -3
  12. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  15. package/dist/components/Icons/Icon.d.ts +4 -4
  16. package/dist/components/Icons/IconSvgs.d.ts +0 -21
  17. package/dist/components/Icons/IconTypes.d.ts +0 -23
  18. package/dist/components/Image/Image.d.ts +11 -3
  19. package/dist/components/Logo/Logo.d.ts +28 -0
  20. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  21. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  22. package/dist/components/Modal/Modal.d.ts +0 -4
  23. package/dist/components/Notification/Notification.d.ts +2 -2
  24. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  25. package/dist/components/Radio/Radio.d.ts +6 -5
  26. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  27. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  28. package/dist/components/Select/Select.d.ts +3 -2
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  30. package/dist/components/Slider/Slider.d.ts +3 -2
  31. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  32. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  33. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  34. package/dist/components/Table/Table.d.ts +23 -0
  35. package/dist/components/Template/Template.d.ts +8 -3
  36. package/dist/components/Text/Text.d.ts +2 -2
  37. package/dist/components/TextInput/TextInput.d.ts +4 -3
  38. package/dist/components/Toggle/Toggle.d.ts +3 -2
  39. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  40. package/dist/design-system-react-components.cjs.development.js +5630 -5692
  41. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  43. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  44. package/dist/design-system-react-components.esm.js +4304 -4362
  45. package/dist/design-system-react-components.esm.js.map +1 -1
  46. package/dist/index.d.ts +6 -4
  47. package/dist/styles.css +2 -2
  48. package/dist/theme/components/button.d.ts +0 -12
  49. package/dist/theme/components/card.d.ts +14 -2
  50. package/dist/theme/components/customTable.d.ts +47 -0
  51. package/dist/theme/components/fieldset.d.ts +2 -2
  52. package/dist/theme/components/global.d.ts +1 -1
  53. package/dist/theme/components/heading.d.ts +4 -0
  54. package/dist/theme/components/label.d.ts +1 -1
  55. package/dist/theme/components/link.d.ts +14 -1
  56. package/dist/theme/components/list.d.ts +0 -2
  57. package/dist/theme/components/logo.d.ts +4 -0
  58. package/dist/theme/components/searchBar.d.ts +7 -13
  59. package/dist/theme/components/select.d.ts +1 -0
  60. package/dist/theme/components/structuredContent.d.ts +33 -0
  61. package/dist/theme/components/template.d.ts +10 -10
  62. package/dist/theme/components/textInput.d.ts +2 -0
  63. package/dist/theme/components/toggle.d.ts +8 -5
  64. package/dist/utils/utils.d.ts +10 -0
  65. package/package.json +1 -2
  66. package/src/__tests__/utils/utils.test.ts +23 -1
  67. package/src/components/Accordion/Accordion.stories.mdx +14 -12
  68. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  69. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  70. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  71. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +30 -11
  72. package/src/components/Button/Button.stories.mdx +93 -48
  73. package/src/components/Button/Button.test.tsx +0 -12
  74. package/src/components/Button/Button.tsx +7 -7
  75. package/src/components/Button/ButtonTypes.tsx +0 -1
  76. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  77. package/src/components/Card/Card.stories.mdx +186 -71
  78. package/src/components/Card/Card.test.tsx +45 -22
  79. package/src/components/Card/Card.tsx +17 -5
  80. package/src/components/Card/__snapshots__/Card.test.tsx.snap +8 -2
  81. package/src/components/Chakra/Box.stories.mdx +3 -3
  82. package/src/components/Chakra/Center.stories.mdx +5 -5
  83. package/src/components/Chakra/Grid.stories.mdx +3 -3
  84. package/src/components/Chakra/Stack.stories.mdx +2 -2
  85. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  86. package/src/components/Checkbox/Checkbox.tsx +13 -8
  87. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  88. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  89. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  90. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  91. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  92. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  93. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  94. package/src/components/DatePicker/DatePicker.tsx +10 -6
  95. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +36 -18
  96. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  97. package/src/components/Form/Form.stories.mdx +49 -41
  98. package/src/components/Form/Form.tsx +5 -4
  99. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  100. package/src/components/Heading/Heading.stories.mdx +59 -23
  101. package/src/components/Heading/Heading.test.tsx +82 -18
  102. package/src/components/Heading/Heading.tsx +31 -31
  103. package/src/components/Heading/HeadingTypes.tsx +6 -6
  104. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  105. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  106. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  107. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  108. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  109. package/src/components/Hero/Hero.stories.mdx +72 -53
  110. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  111. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  112. package/src/components/Icons/Icon.stories.mdx +77 -76
  113. package/src/components/Icons/Icon.tsx +4 -5
  114. package/src/components/Icons/IconSvgs.tsx +0 -42
  115. package/src/components/Icons/IconTypes.tsx +0 -24
  116. package/src/components/Image/Image.stories.mdx +66 -18
  117. package/src/components/Image/Image.tsx +21 -10
  118. package/src/components/Label/Label.stories.mdx +20 -19
  119. package/src/components/Link/Link.stories.mdx +102 -51
  120. package/src/components/Link/Link.test.tsx +38 -8
  121. package/src/components/Link/Link.tsx +19 -12
  122. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  123. package/src/components/List/List.stories.mdx +36 -24
  124. package/src/components/Logo/Logo.stories.mdx +220 -0
  125. package/src/components/Logo/Logo.test.tsx +98 -0
  126. package/src/components/Logo/Logo.tsx +97 -0
  127. package/src/components/Logo/LogoSvgs.tsx +34 -0
  128. package/src/components/Logo/LogoTypes.tsx +32 -0
  129. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  130. package/src/components/Modal/Modal.stories.mdx +20 -5
  131. package/src/components/Modal/Modal.tsx +2 -8
  132. package/src/components/Notification/Notification.stories.mdx +61 -38
  133. package/src/components/Notification/Notification.tsx +9 -4
  134. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  135. package/src/components/Pagination/Pagination.stories.mdx +17 -6
  136. package/src/components/Pagination/Pagination.tsx +1 -1
  137. package/src/components/Placeholder/Placeholder.tsx +7 -14
  138. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  139. package/src/components/Radio/Radio.stories.mdx +39 -19
  140. package/src/components/Radio/Radio.tsx +13 -9
  141. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  142. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  143. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  144. package/src/components/SearchBar/SearchBar.Test.tsx +58 -10
  145. package/src/components/SearchBar/SearchBar.stories.mdx +109 -30
  146. package/src/components/SearchBar/SearchBar.tsx +53 -32
  147. package/src/components/Select/Select.stories.mdx +48 -14
  148. package/src/components/Select/Select.tsx +16 -10
  149. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  150. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  151. package/src/components/Slider/Slider.stories.mdx +72 -22
  152. package/src/components/Slider/Slider.tsx +15 -10
  153. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  154. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  155. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  156. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  157. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  158. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  159. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  160. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  161. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  162. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  163. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  164. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  165. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  166. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  167. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  168. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  169. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  170. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  171. package/src/components/Table/Table.stories.mdx +66 -0
  172. package/src/components/Table/Table.test.tsx +60 -0
  173. package/src/components/Table/Table.tsx +116 -0
  174. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  175. package/src/components/Tabs/Tabs.test.tsx +1 -1
  176. package/src/components/Template/Template.stories.mdx +56 -47
  177. package/src/components/Template/Template.test.tsx +65 -5
  178. package/src/components/Template/Template.tsx +35 -5
  179. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  180. package/src/components/Text/Text.stories.mdx +33 -11
  181. package/src/components/Text/Text.tsx +2 -2
  182. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  183. package/src/components/TextInput/TextInput.test.tsx +96 -0
  184. package/src/components/TextInput/TextInput.tsx +12 -8
  185. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  186. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  187. package/src/components/Toggle/Toggle.tsx +14 -9
  188. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  189. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  190. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  191. package/src/docs/Chakra.stories.mdx +5 -8
  192. package/src/docs/Intro.stories.mdx +2 -2
  193. package/src/index.ts +5 -4
  194. package/src/styles/base/_03-base.scss +1 -1
  195. package/src/styles/base/_place-holder.scss +7 -7
  196. package/src/styles.scss +1 -5
  197. package/src/theme/components/breadcrumb.ts +3 -3
  198. package/src/theme/components/button.ts +5 -12
  199. package/src/theme/components/card.ts +5 -2
  200. package/src/theme/components/checkbox.ts +1 -1
  201. package/src/theme/components/customTable.ts +50 -0
  202. package/src/theme/components/datePicker.ts +1 -1
  203. package/src/theme/components/global.ts +6 -6
  204. package/src/theme/components/heading.ts +13 -11
  205. package/src/theme/components/helperErrorText.ts +1 -1
  206. package/src/theme/components/image.ts +1 -1
  207. package/src/theme/components/link.ts +17 -5
  208. package/src/theme/components/list.ts +1 -3
  209. package/src/theme/components/logo.ts +54 -0
  210. package/src/theme/components/notification.ts +1 -1
  211. package/src/theme/components/searchBar.ts +7 -13
  212. package/src/theme/components/select.ts +1 -0
  213. package/src/theme/components/statusBadge.ts +1 -1
  214. package/src/theme/components/structuredContent.ts +54 -0
  215. package/src/theme/components/template.ts +10 -10
  216. package/src/theme/components/text.ts +6 -6
  217. package/src/theme/components/textInput.ts +1 -0
  218. package/src/theme/components/toggle.ts +9 -5
  219. package/src/theme/components/videoPlayer.ts +0 -2
  220. package/src/theme/foundations/global.ts +2 -2
  221. package/src/theme/foundations/typography.ts +84 -12
  222. package/src/theme/index.ts +6 -0
  223. package/src/utils/componentCategories.ts +1 -1
  224. package/src/utils/utils.ts +17 -0
  225. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  226. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  227. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  228. package/dist/components/Input/Input.d.ts +0 -36
  229. package/dist/components/Input/Input.stories.d.ts +0 -29
  230. package/dist/components/Input/InputTypes.d.ts +0 -6
  231. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  232. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  233. package/dist/helpers/getCSSVariable.d.ts +0 -1
  234. package/dist/interfaces.d.ts +0 -3
  235. package/dist/utils/bem.d.ts +0 -1
  236. package/src/__tests__/utils/bem.test.ts +0 -37
  237. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  238. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  239. package/src/components/CardEdition/CardEdition.tsx +0 -60
  240. package/src/components/CardEdition/_CardEdition.scss +0 -137
  241. package/src/components/Input/Input.stories.tsx +0 -133
  242. package/src/components/Input/Input.test.tsx +0 -266
  243. package/src/components/Input/Input.tsx +0 -81
  244. package/src/components/Input/InputTypes.tsx +0 -8
  245. package/src/components/Input/_Input.scss +0 -78
  246. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  247. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  248. package/src/helpers/getCSSVariable.tsx +0 -5
  249. package/src/interfaces.ts +0 -3
  250. package/src/utils/bem.ts +0 -44
@@ -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}
@@ -1,24 +1,24 @@
1
1
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
2
  ArgsTable,
6
- Preview,
3
+ Canvas,
7
4
  Description,
8
- } from "@storybook/addon-docs/blocks";
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
9
8
  import { withDesign } from "storybook-addon-designs";
10
9
 
10
+ import Icon from "../Icons/Icon";
11
+ import { IconColors, IconNames } from "../Icons/IconTypes";
11
12
  import Notification from "./Notification";
12
13
  import { NotificationTypes } from "./NotificationTypes";
13
- import Icon from "../Icons/Icon";
14
- import {
15
- IconSizes,
16
- IconColors,
17
- IconNames,
18
- IconAlign,
19
- } from "../Icons/IconTypes";
20
14
  import { getCategory } from "../../utils/componentCategories";
21
15
  import DSProvider from "../../theme/provider";
16
+ import { getStorybookEnumValues } from "../../utils/utils";
17
+
18
+ export const enumValues = getStorybookEnumValues(
19
+ NotificationTypes,
20
+ "NotificationTypes"
21
+ );
22
22
 
23
23
  <Meta
24
24
  title={getCategory("Notification")}
@@ -31,6 +31,25 @@ import DSProvider from "../../theme/provider";
31
31
  },
32
32
  jest: ["Notification.test.tsx"],
33
33
  }}
34
+ argTypes={{
35
+ centered: {
36
+ table: { defaultValue: { summary: false } },
37
+ },
38
+ className: { control: false },
39
+ dismissible: {
40
+ table: { defaultValue: { summary: false } },
41
+ },
42
+ icon: { control: false },
43
+ id: { control: false },
44
+ noMargin: {
45
+ table: { defaultValue: { summary: false } },
46
+ },
47
+ notificationType: {
48
+ control: { type: "select" },
49
+ table: { defaultValue: { summary: "NotificationTypes.Standard" } },
50
+ options: enumValues.options,
51
+ },
52
+ }}
34
53
  />
35
54
 
36
55
  # Notification
@@ -38,7 +57,7 @@ import DSProvider from "../../theme/provider";
38
57
  | Component Version | DS Version |
39
58
  | ----------------- | ---------- |
40
59
  | Added | `0.23.2` |
41
- | Latest | `0.25.8` |
60
+ | Latest | `0.25.9` |
42
61
 
43
62
  <Description of={Notification} />
44
63
 
@@ -51,10 +70,14 @@ within a parent element.
51
70
 
52
71
  <Canvas>
53
72
  <Story
54
- name="Notification Props"
73
+ name="Notification with Controls"
55
74
  args={{
56
- id: "basic-notification",
57
- centered: true,
75
+ centered: false,
76
+ className: undefined,
77
+ dismissible: false,
78
+ icon: undefined,
79
+ id: "notification-id",
80
+ noMargin: false,
58
81
  notificationHeading: "Notification Heading",
59
82
  notificationContent: (
60
83
  <>
@@ -71,13 +94,16 @@ within a parent element.
71
94
  >
72
95
  {(args) => (
73
96
  <div style={{ border: "1px solid #ccc" }}>
74
- <Notification {...args} />
97
+ <Notification
98
+ {...args}
99
+ notificationType={enumValues.getValue(args.notificationType)}
100
+ />
75
101
  </div>
76
102
  )}
77
103
  </Story>
78
104
  </Canvas>
79
105
 
80
- <ArgsTable story="Notification Props" />
106
+ <ArgsTable story="Notification with Controls" />
81
107
 
82
108
  ## Variants
83
109
 
@@ -233,25 +259,22 @@ The default icon can be overridden by using the `icon` prop to pass a custom `Ic
233
259
 
234
260
  <Canvas>
235
261
  <Story name="Custom Icons">
236
- {(args) => (
237
- <Notification
238
- icon={
239
- <Icon
240
- name={IconNames.Check}
241
- color={IconColors.SectionResearchSecondary}
242
- />
243
- }
244
- notificationHeading="Custom Icon"
245
- notificationContent={
246
- <>
247
- This is a Notification with a custom icon. Cras mattis consectetur
248
- purus sit amet fermentum. Maecenas faucibus mollis interdum. Morbi
249
- leo risus, porta ac consectetur ac, vestibulum at eros. Cum sociis
250
- natoque penatibus et magnis dis parturient montes, nascetur
251
- ridiculus mus.
252
- </>
253
- }
254
- />
255
- )}
262
+ <Notification
263
+ icon={
264
+ <Icon
265
+ name={IconNames.Check}
266
+ color={IconColors.SectionResearchSecondary}
267
+ />
268
+ }
269
+ notificationHeading="Custom Icon"
270
+ notificationContent={
271
+ <>
272
+ This is a Notification with a custom icon. Cras mattis consectetur
273
+ purus sit amet fermentum. Maecenas faucibus mollis interdum. Morbi leo
274
+ risus, porta ac consectetur ac, vestibulum at eros. Cum sociis natoque
275
+ penatibus et magnis dis parturient montes, nascetur ridiculus mus.
276
+ </>
277
+ }
278
+ />
256
279
  </Story>
257
280
  </Canvas>
@@ -17,6 +17,8 @@ interface BaseProps {
17
17
  centered?: boolean;
18
18
  /** Optional custom `Icon` that will override the default `Icon`. */
19
19
  icon?: JSX.Element;
20
+ /** ID that other components can cross reference for accessibility purposes. */
21
+ id?: string;
20
22
  /** Optional prop to control the coloring of the `Notification` text and the
21
23
  * visibility of an applicable icon. */
22
24
  notificationType?: NotificationTypes;
@@ -35,8 +37,6 @@ export interface NotificationProps extends BasePropsWithoutAlignText {
35
37
  dismissible?: boolean;
36
38
  /** Optional custom `Icon` that will override the default `Icon`. */
37
39
  icon?: JSX.Element;
38
- /** ID that other components can cross reference for accessibility purposes. */
39
- id?: string;
40
40
  /** Optional prop to control the margin around the `Notification` component. */
41
41
  noMargin?: boolean;
42
42
  /** Content to be rendered in a `NotificationContent` component. */
@@ -53,7 +53,7 @@ export interface NotificationProps extends BasePropsWithoutAlignText {
53
53
  export function NotificationHeading(
54
54
  props: React.PropsWithChildren<BasePropsWithoutAlignText>
55
55
  ) {
56
- const { centered, children, icon, notificationType } = props;
56
+ const { centered, children, icon, id, notificationType } = props;
57
57
  const styles = useMultiStyleConfig("NotificationHeading", {
58
58
  centered,
59
59
  icon,
@@ -62,7 +62,11 @@ export function NotificationHeading(
62
62
  return (
63
63
  <Box as="header" __css={styles}>
64
64
  {icon}
65
- <Heading level={HeadingLevels.Four} additionalStyles={styles.heading}>
65
+ <Heading
66
+ additionalStyles={styles.heading}
67
+ id={`${id}-heading`}
68
+ level={HeadingLevels.Four}
69
+ >
66
70
  {children}
67
71
  </Heading>
68
72
  </Box>
@@ -171,6 +175,7 @@ export default function Notification(props: NotificationProps) {
171
175
  <NotificationHeading
172
176
  centered={centered}
173
177
  icon={iconElem}
178
+ id={id}
174
179
  notificationType={notificationType}
175
180
  >
176
181
  {notificationHeading}
@@ -46,6 +46,7 @@ exports[`Notification renders the UI snapshot correctly 1`] = `
46
46
  </svg>
47
47
  <h4
48
48
  className="chakra-heading css-0"
49
+ id="notificationID1-heading"
49
50
  >
50
51
  Notification Heading
51
52
  </h4>
@@ -109,6 +110,7 @@ exports[`Notification renders the UI snapshot correctly 2`] = `
109
110
  </svg>
110
111
  <h4
111
112
  className="chakra-heading css-0"
113
+ id="notificationID2-heading"
112
114
  >
113
115
  Notification Heading
114
116
  </h4>
@@ -172,6 +174,7 @@ exports[`Notification renders the UI snapshot correctly 3`] = `
172
174
  </svg>
173
175
  <h4
174
176
  className="chakra-heading css-0"
177
+ id="notificationID3-heading"
175
178
  >
176
179
  Notification Heading
177
180
  </h4>
@@ -257,6 +260,7 @@ exports[`Notification renders the UI snapshot correctly 5`] = `
257
260
  >
258
261
  <h4
259
262
  className="chakra-heading css-0"
263
+ id="notificationID5-heading"
260
264
  >
261
265
  Notification Heading
262
266
  </h4>
@@ -1,12 +1,13 @@
1
1
  import {
2
- Meta,
3
- Story,
4
2
  ArgsTable,
5
3
  Canvas,
6
4
  Description,
7
- } from "@storybook/addon-docs/blocks";
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
8
8
  import { withDesign } from "storybook-addon-designs";
9
9
  import { withQuery } from "@storybook/addon-queryparams";
10
+
10
11
  import Pagination from "./Pagination";
11
12
  import * as stories from "./Pagination.stories.tsx";
12
13
  import { getCategory } from "../../utils/componentCategories";
@@ -23,9 +24,11 @@ import { getCategory } from "../../utils/componentCategories";
23
24
  jest: ["Pagination.test.tsx"],
24
25
  }}
25
26
  argTypes={{
26
- id: { table: { disable: true } },
27
- getPageHref: { table: { disable: true } },
28
- onPageChange: { table: { disable: true } },
27
+ className: { control: false },
28
+ getPageHref: { control: false },
29
+ id: { control: false },
30
+ initialPage: { table: { defaultValue: { summary: 1 } } },
31
+ onPageChange: { control: false },
29
32
  }}
30
33
  />
31
34
 
@@ -69,7 +72,11 @@ const getPageHref = (selectedPage: number) => {
69
72
  <Story
70
73
  name="Pagination with URL Updates"
71
74
  args={{
75
+ className: undefined,
76
+ getPageHref: undefined,
77
+ id: "pagination-id",
72
78
  initialPage: 1,
79
+ onPageChange: undefined,
73
80
  pageCount: 10,
74
81
  }}
75
82
  >
@@ -102,7 +109,11 @@ const onPageChange = (currentPage: number) => {
102
109
  <Story
103
110
  name="Pagination with Unchanging URL"
104
111
  args={{
112
+ className: undefined,
113
+ getPageHref: undefined,
114
+ id: "pagination-id-2",
105
115
  initialPage: 7,
116
+ onPageChange: undefined,
106
117
  pageCount: 100,
107
118
  }}
108
119
  >
@@ -31,9 +31,9 @@ export interface PaginationProps {
31
31
  const Pagination: React.FC<PaginationProps> = (props: PaginationProps) => {
32
32
  const {
33
33
  className,
34
- initialPage = 1,
35
34
  getPageHref,
36
35
  id = generateUUID(),
36
+ initialPage = 1,
37
37
  onPageChange = () => {},
38
38
  pageCount,
39
39
  } = props;
@@ -1,24 +1,17 @@
1
1
  import * as React from "react";
2
- import bem from "../../utils/bem";
3
2
 
4
3
  export interface PlaceholderProps {
5
- /** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
6
- blockName?: string;
7
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
8
- modifiers?: string[];
4
+ /** Modifier string for the classname. */
5
+ variant?: string;
9
6
  }
10
7
 
11
8
  /** Creates a gray box with an editable string for dropping in spaces
12
9
  * within components or on templates where a component will be but
13
10
  * that hasn't been created yet
14
11
  */
15
- export default function Placeholder(
16
- props: React.PropsWithChildren<PlaceholderProps>
17
- ) {
18
- const { modifiers = [], blockName } = props;
19
- return (
20
- <div className={bem("placeholder", modifiers, blockName)}>
21
- {props.children}
22
- </div>
23
- );
12
+ export default function Placeholder({
13
+ children,
14
+ variant,
15
+ }: React.PropsWithChildren<PlaceholderProps>) {
16
+ return <div className={`placeholder placeholder-${variant}`}>{children}</div>;
24
17
  }