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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/CHANGELOG.md +98 -1
  2. package/README.md +46 -11
  3. package/dist/components/Accordion/Accordion.d.ts +14 -14
  4. package/dist/components/Autosuggest/Autosuggest.stories.d.ts +1 -0
  5. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
  6. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  7. package/dist/components/Button/Button.d.ts +6 -13
  8. package/dist/components/Button/ButtonTypes.d.ts +5 -3
  9. package/dist/components/Card/Card.d.ts +59 -10
  10. package/dist/components/Card/CardTypes.d.ts +19 -0
  11. package/dist/components/CardEdition/CardEdition.d.ts +21 -0
  12. package/dist/components/{StyleGuide/Colors.stories.d.ts → CardEdition/CardEdition.stories.d.ts} +5 -2
  13. package/dist/components/Checkbox/Checkbox.d.ts +21 -16
  14. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
  15. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  16. package/dist/components/DatePicker/DatePicker.d.ts +79 -0
  17. package/dist/components/DatePicker/DatePickerTypes.d.ts +5 -0
  18. package/dist/components/Form/Form.d.ts +16 -8
  19. package/dist/components/Form/FormTypes.d.ts +2 -0
  20. package/dist/components/Grid/GridTypes.d.ts +9 -0
  21. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  22. package/dist/components/Heading/Heading.d.ts +9 -11
  23. package/dist/components/Heading/{HeadingDisplaySizes.d.ts → HeadingTypes.d.ts} +8 -0
  24. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +2 -1
  25. package/dist/components/Hero/Hero.d.ts +19 -14
  26. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  27. package/dist/components/Icons/Icon.d.ts +13 -16
  28. package/dist/components/Icons/IconSvgs.d.ts +4 -0
  29. package/dist/components/Icons/IconTypes.d.ts +78 -60
  30. package/dist/components/Image/Image.stories.d.ts +2 -1
  31. package/dist/components/Label/Label.d.ts +10 -26
  32. package/dist/components/Link/Link.d.ts +8 -12
  33. package/dist/components/List/List.stories.d.ts +1 -0
  34. package/dist/components/Radio/Radio.d.ts +30 -24
  35. package/dist/components/RadioGroup/RadioGroup.d.ts +40 -0
  36. package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +4 -0
  37. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  38. package/dist/components/Select/Select.d.ts +34 -35
  39. package/dist/components/Select/SelectTypes.d.ts +4 -0
  40. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
  41. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  42. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  43. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  44. package/dist/components/Tabs/Tabs.d.ts +25 -0
  45. package/dist/components/Template/Template.d.ts +91 -0
  46. package/dist/components/Text/Text.d.ts +16 -0
  47. package/dist/components/Text/TextTypes.d.ts +6 -0
  48. package/dist/components/TextInput/TextInput.d.ts +37 -30
  49. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  50. package/dist/design-system-react-components.cjs.development.js +4102 -917
  51. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  52. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  53. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  54. package/dist/design-system-react-components.esm.js +4023 -920
  55. package/dist/design-system-react-components.esm.js.map +1 -1
  56. package/dist/index.d.ts +23 -5
  57. package/dist/resources.scss +133 -24
  58. package/dist/styles.css +1 -1
  59. package/dist/theme/components/accordion.d.ts +25 -0
  60. package/dist/theme/components/breadcrumb.d.ts +90 -0
  61. package/dist/theme/components/button.d.ts +109 -0
  62. package/dist/theme/components/checkbox.d.ts +91 -0
  63. package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
  64. package/dist/theme/components/customRadioGroup.d.ts +18 -0
  65. package/dist/theme/components/global.d.ts +55 -0
  66. package/dist/theme/components/globalMixins.d.ts +15 -0
  67. package/dist/theme/components/heading.d.ts +110 -0
  68. package/dist/theme/components/hero.d.ts +492 -0
  69. package/dist/theme/components/icon.d.ts +13 -0
  70. package/dist/theme/components/label.d.ts +16 -0
  71. package/dist/theme/components/link.d.ts +45 -0
  72. package/dist/theme/components/radio.d.ts +95 -0
  73. package/dist/theme/components/searchBar.d.ts +20 -0
  74. package/dist/theme/components/select.d.ts +58 -0
  75. package/dist/theme/components/statusBadge.d.ts +25 -0
  76. package/dist/theme/components/tabs.d.ts +85 -0
  77. package/dist/theme/components/template.d.ts +105 -0
  78. package/dist/theme/components/text.d.ts +20 -0
  79. package/dist/theme/components/textInput.d.ts +105 -0
  80. package/dist/theme/foundations/breakpoints.d.ts +23 -0
  81. package/dist/theme/foundations/colors.d.ts +3 -0
  82. package/dist/theme/foundations/global.d.ts +23 -0
  83. package/dist/theme/foundations/shadows.d.ts +4 -0
  84. package/dist/theme/foundations/spacing.d.ts +77 -0
  85. package/dist/theme/foundations/typography.d.ts +8 -0
  86. package/dist/theme/index.d.ts +20 -0
  87. package/dist/theme/provider.d.ts +5 -0
  88. package/dist/theme/types.d.ts +1 -0
  89. package/dist/utils/utils.d.ts +6 -0
  90. package/package.json +9 -2
  91. package/src/components/Accordion/Accordion.stories.mdx +233 -33
  92. package/src/components/Accordion/Accordion.test.tsx +135 -19
  93. package/src/components/Accordion/Accordion.tsx +81 -56
  94. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  95. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
  96. package/src/components/Autosuggest/_Autosuggest.scss +2 -2
  97. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +57 -56
  98. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
  99. package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
  100. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  101. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
  102. package/src/components/Button/Button.stories.mdx +125 -138
  103. package/src/components/Button/Button.test.tsx +65 -11
  104. package/src/components/Button/Button.tsx +72 -68
  105. package/src/components/Button/ButtonTypes.tsx +4 -2
  106. package/src/components/Button/_Button.scss +7 -92
  107. package/src/components/Button/__snapshots__/Button.test.tsx.snap +58 -3
  108. package/src/components/Card/Card.stories.mdx +694 -0
  109. package/src/components/Card/Card.test.tsx +97 -102
  110. package/src/components/Card/Card.tsx +182 -31
  111. package/src/components/Card/CardTypes.tsx +21 -0
  112. package/src/components/Card/_Card.scss +234 -49
  113. package/src/components/{Card/Card.stories.tsx → CardEdition/CardEdition.stories.tsx} +32 -22
  114. package/src/components/CardEdition/CardEdition.test.tsx +395 -0
  115. package/src/components/CardEdition/CardEdition.tsx +60 -0
  116. package/src/components/CardEdition/_CardEdition.scss +138 -0
  117. package/src/components/Chakra/Box.stories.mdx +57 -0
  118. package/src/components/Chakra/Center.stories.mdx +99 -0
  119. package/src/components/Chakra/Grid.stories.mdx +79 -0
  120. package/src/components/Chakra/Stack.stories.mdx +93 -0
  121. package/src/components/Checkbox/Checkbox.stories.mdx +57 -35
  122. package/src/components/Checkbox/Checkbox.test.tsx +117 -147
  123. package/src/components/Checkbox/Checkbox.tsx +76 -50
  124. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +325 -0
  125. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
  126. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
  127. package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
  128. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  129. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
  130. package/src/components/DatePicker/DatePicker.stories.mdx +284 -0
  131. package/src/components/DatePicker/DatePicker.test.tsx +657 -0
  132. package/src/components/DatePicker/DatePicker.tsx +396 -0
  133. package/src/components/DatePicker/DatePickerTypes.tsx +5 -0
  134. package/src/components/DatePicker/_DatePicker.scss +76 -0
  135. package/src/components/Form/Form.stories.mdx +130 -27
  136. package/src/components/Form/Form.test.tsx +78 -36
  137. package/src/components/Form/Form.tsx +53 -19
  138. package/src/components/Form/FormTypes.tsx +3 -0
  139. package/src/components/Form/__snapshots__/Form.test.tsx.snap +38 -0
  140. package/src/components/Grid/GridTypes.tsx +9 -0
  141. package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
  142. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  143. package/src/components/Grid/SimpleGrid.tsx +37 -0
  144. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  145. package/src/components/Heading/Heading.stories.mdx +63 -33
  146. package/src/components/Heading/Heading.test.tsx +24 -16
  147. package/src/components/Heading/Heading.tsx +54 -38
  148. package/src/components/Heading/{HeadingDisplaySizes.tsx → HeadingTypes.tsx} +9 -0
  149. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +2 -1
  150. package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
  151. package/src/components/Hero/Hero.stories.mdx +195 -85
  152. package/src/components/Hero/Hero.test.tsx +544 -113
  153. package/src/components/Hero/Hero.tsx +80 -93
  154. package/src/components/Hero/HeroTypes.tsx +17 -5
  155. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  156. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -1
  157. package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
  158. package/src/components/Icons/Icon.stories.mdx +89 -74
  159. package/src/components/Icons/Icon.test.tsx +30 -22
  160. package/src/components/Icons/Icon.tsx +63 -61
  161. package/src/components/Icons/IconSvgs.tsx +8 -0
  162. package/src/components/Icons/IconTypes.tsx +80 -60
  163. package/src/components/Image/Image.stories.tsx +2 -1
  164. package/src/components/Input/_Input.scss +2 -2
  165. package/src/components/Label/Label.stories.mdx +77 -0
  166. package/src/components/Label/Label.test.tsx +43 -12
  167. package/src/components/Label/Label.tsx +28 -45
  168. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  169. package/src/components/Link/Link.stories.mdx +47 -41
  170. package/src/components/Link/Link.test.tsx +33 -44
  171. package/src/components/Link/Link.tsx +114 -100
  172. package/src/components/List/List.stories.mdx +7 -3
  173. package/src/components/List/List.stories.tsx +14 -9
  174. package/src/components/List/List.test.tsx +12 -8
  175. package/src/components/List/List.tsx +9 -7
  176. package/src/components/List/_List.scss +3 -3
  177. package/src/components/Modal/Modal.stories.mdx +7 -3
  178. package/src/components/Modal/_Modal.scss +1 -1
  179. package/src/components/Notification/Notification.stories.mdx +99 -65
  180. package/src/components/Notification/Notification.test.tsx +3 -16
  181. package/src/components/Notification/Notification.tsx +12 -12
  182. package/src/components/Notification/_Notification.scss +5 -4
  183. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +1 -1
  184. package/src/components/Pagination/Pagination.stories.mdx +7 -1
  185. package/src/components/Pagination/Pagination.test.tsx +16 -10
  186. package/src/components/Radio/Radio.stories.mdx +57 -46
  187. package/src/components/Radio/Radio.test.tsx +92 -138
  188. package/src/components/Radio/Radio.tsx +70 -69
  189. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +250 -0
  190. package/src/components/RadioGroup/RadioGroup.stories.mdx +247 -0
  191. package/src/components/RadioGroup/RadioGroup.test.tsx +327 -0
  192. package/src/components/RadioGroup/RadioGroup.tsx +154 -0
  193. package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +4 -0
  194. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1101 -0
  195. package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
  196. package/src/components/SearchBar/SearchBar.stories.mdx +196 -224
  197. package/src/components/SearchBar/SearchBar.tsx +151 -46
  198. package/src/components/Select/Select.stories.mdx +193 -168
  199. package/src/components/Select/Select.test.tsx +129 -324
  200. package/src/components/Select/Select.tsx +120 -160
  201. package/src/components/Select/SelectTypes.tsx +4 -0
  202. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +18 -29
  203. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
  204. package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
  205. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  206. package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
  207. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  208. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  209. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  210. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  211. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  212. package/src/components/StyleGuide/Bidirectionality.stories.mdx +112 -90
  213. package/src/components/StyleGuide/Buttons.stories.mdx +98 -100
  214. package/src/components/StyleGuide/Colors.stories.mdx +336 -0
  215. package/src/components/StyleGuide/Forms.stories.mdx +85 -0
  216. package/src/components/StyleGuide/Iconography.stories.mdx +86 -93
  217. package/src/components/StyleGuide/Spacing.stories.mdx +0 -1
  218. package/src/components/StyleGuide/Typography.stories.mdx +164 -166
  219. package/src/components/StyleGuide/UIDocCard.tsx +4 -4
  220. package/src/components/Tabs/Tabs.stories.mdx +221 -0
  221. package/src/components/Tabs/Tabs.test.tsx +264 -0
  222. package/src/components/Tabs/Tabs.tsx +220 -0
  223. package/src/components/Template/Template.stories.mdx +574 -0
  224. package/src/components/Template/Template.test.tsx +124 -0
  225. package/src/components/Template/Template.tsx +226 -0
  226. package/src/components/Text/Text.stories.mdx +70 -0
  227. package/src/components/Text/Text.test.tsx +63 -0
  228. package/src/components/Text/Text.tsx +55 -0
  229. package/src/components/Text/TextTypes.tsx +6 -0
  230. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  231. package/src/components/TextInput/TextInput.stories.mdx +90 -90
  232. package/src/components/TextInput/TextInput.test.tsx +103 -83
  233. package/src/components/TextInput/TextInput.tsx +108 -91
  234. package/src/components/TextInput/TextInputTypes.tsx +6 -0
  235. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -1
  236. package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
  237. package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
  238. package/src/docs/Chakra.stories.mdx +341 -0
  239. package/src/docs/Intro.stories.mdx +31 -24
  240. package/src/index.ts +70 -5
  241. package/src/styles/01-colors/_colors-brand.scss +6 -4
  242. package/src/styles/01-colors/_colors-utility.scss +14 -15
  243. package/src/styles/03-space/_space-inline.scss +47 -7
  244. package/src/styles/03-space/_space-inset.scss +33 -5
  245. package/src/styles/03-space/_space-stack.scss +48 -8
  246. package/src/styles/base/_02-breakpoints.scss +5 -4
  247. package/src/styles/base/_04-base.scss +2 -1
  248. package/src/styles/base/_place-holder.scss +1 -1
  249. package/src/styles/base/_typography.scss +1 -29
  250. package/src/styles.scss +22 -25
  251. package/src/theme/components/accordion.ts +30 -0
  252. package/src/theme/components/breadcrumb.ts +77 -0
  253. package/src/theme/components/button.ts +125 -0
  254. package/src/theme/components/checkbox.ts +107 -0
  255. package/src/theme/components/customCheckboxGroup.ts +12 -0
  256. package/src/theme/components/customRadioGroup.ts +12 -0
  257. package/src/theme/components/global.ts +71 -0
  258. package/src/theme/components/globalMixins.ts +16 -0
  259. package/src/theme/components/heading.ts +72 -0
  260. package/src/theme/components/hero.ts +239 -0
  261. package/src/theme/components/icon.ts +79 -0
  262. package/src/theme/components/label.ts +17 -0
  263. package/src/theme/components/link.ts +47 -0
  264. package/src/theme/components/radio.ts +106 -0
  265. package/src/theme/components/searchBar.ts +21 -0
  266. package/src/theme/components/select.ts +50 -0
  267. package/src/theme/components/statusBadge.ts +27 -0
  268. package/src/theme/components/tabs.ts +79 -0
  269. package/src/theme/components/template.ts +114 -0
  270. package/src/theme/components/text.ts +31 -0
  271. package/src/theme/components/textInput.ts +61 -0
  272. package/src/theme/foundations/breakpoints.ts +24 -0
  273. package/src/theme/foundations/colors.ts +208 -0
  274. package/src/theme/foundations/global.ts +26 -0
  275. package/src/theme/foundations/shadows.ts +5 -0
  276. package/src/theme/foundations/spacing.ts +85 -0
  277. package/src/theme/foundations/typography.ts +35 -0
  278. package/src/theme/index.ts +88 -0
  279. package/src/theme/provider.tsx +9 -0
  280. package/src/theme/types.ts +1 -0
  281. package/src/utils/componentCategories.ts +56 -21
  282. package/src/utils/utils.ts +13 -0
  283. package/dist/components/Accordion/Accordion.stories.d.ts +0 -5
  284. package/dist/components/Card/Card.stories.d.ts +0 -27
  285. package/dist/components/Label/Label.stories.d.ts +0 -12
  286. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  287. package/dist/components/Template/Template.stories.d.ts +0 -29
  288. package/src/components/Accordion/Accordion.stories.tsx +0 -65
  289. package/src/components/Accordion/_Accordion.scss +0 -81
  290. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  291. package/src/components/Checkbox/_Checkbox.scss +0 -97
  292. package/src/components/Form/_Form.scss +0 -28
  293. package/src/components/Heading/_Heading.scss +0 -163
  294. package/src/components/Hero/_Hero.scss +0 -256
  295. package/src/components/Icons/_Icons.scss +0 -116
  296. package/src/components/Label/Label.stories.tsx +0 -30
  297. package/src/components/Label/_Label.scss +0 -22
  298. package/src/components/Link/_Link.scss +0 -73
  299. package/src/components/Radio/_Radio.scss +0 -84
  300. package/src/components/SearchBar/_SearchBar.scss +0 -16
  301. package/src/components/Select/_Select.scss +0 -82
  302. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -33
  303. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  304. package/src/components/StyleGuide/Colors.stories.tsx +0 -288
  305. package/src/components/Template/Template.stories.tsx +0 -85
  306. package/src/components/Template/_Template.scss +0 -63
  307. package/src/components/TextInput/_TextInput.scss +0 -59
@@ -1,25 +1,53 @@
1
1
  import * as React from "react";
2
2
  import { render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
4
5
 
5
6
  import StatusBadge from "./StatusBadge";
7
+ import { StatusBadgeTypes } from "./StatusBadgeTypes";
6
8
 
7
9
  describe("StatusBadge Accessibility", () => {
8
10
  it("passes axe accessibility test", async () => {
9
11
  const { container } = render(
10
- <StatusBadge level={"low"}>Registration Required</StatusBadge>
12
+ <StatusBadge>Registration Required</StatusBadge>
11
13
  );
12
14
  expect(await axe(container)).toHaveNoViolations();
13
15
  });
14
16
  });
15
17
 
16
- describe("StatusBadge Test", () => {
17
- it("Shows status badge", () => {
18
- render(<StatusBadge level={"low"}>Registration Required</StatusBadge>);
18
+ describe("StatusBadge", () => {
19
+ it("renders a status badge and text", () => {
20
+ render(<StatusBadge>Registration Required</StatusBadge>);
19
21
  expect(screen.getByText("Registration Required")).toBeInTheDocument();
20
22
  });
21
- it("Can pass status badge content as child", () => {
22
- render(<StatusBadge level={"medium"}>Cancelled</StatusBadge>);
23
- expect(screen.getByText("Cancelled")).toBeInTheDocument();
23
+
24
+ it("throws a warning when no children are passed", () => {
25
+ const warn = jest.spyOn(console, "warn");
26
+ render(<StatusBadge></StatusBadge>);
27
+ expect(warn).toHaveBeenCalledWith("Status Badge has no children.");
28
+ });
29
+
30
+ it("renders the UI snapshot correctly", () => {
31
+ const low = renderer
32
+ .create(<StatusBadge id="low">Registration Required</StatusBadge>)
33
+ .toJSON();
34
+ const medium = renderer
35
+ .create(
36
+ <StatusBadge id="medium" level={StatusBadgeTypes.Medium}>
37
+ Registration Required
38
+ </StatusBadge>
39
+ )
40
+ .toJSON();
41
+ const high = renderer
42
+ .create(
43
+ <StatusBadge id="high" level={StatusBadgeTypes.High}>
44
+ Registration Required
45
+ </StatusBadge>
46
+ )
47
+ .toJSON();
48
+
49
+ expect(low).toMatchSnapshot();
50
+ expect(medium).toMatchSnapshot();
51
+ expect(high).toMatchSnapshot();
24
52
  });
25
53
  });
@@ -1,37 +1,36 @@
1
1
  import * as React from "react";
2
- import bem from "../../utils/bem";
2
+ import { Box, useStyleConfig } from "@chakra-ui/react";
3
+
4
+ import { StatusBadgeTypes } from "./StatusBadgeTypes";
5
+ import generateUUID from "../../helpers/generateUUID";
3
6
 
4
7
  export interface StatusBadgeProps {
5
- /** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
6
- blockName?: string;
7
- /** ClassName that appears in addition to "status-badge" */
8
+ /** Additional class for the component */
8
9
  className?: string;
9
- /** Level of badge **/
10
- level?: "low" | "medium" | "high";
10
+ /** ID that other components can cross reference for accessibility purposes */
11
+ id?: string;
12
+ /** Level of the status badge through StatusBadgeTypes. */
13
+ level?: StatusBadgeTypes;
11
14
  }
12
15
 
13
- export default function StatusBadge(
14
- props: React.PropsWithChildren<StatusBadgeProps>
15
- ) {
16
- const { blockName, className, level } = props;
17
-
18
- const baseClass = "status-badge";
19
-
20
- let statusBadgeModifiers = ["low"];
16
+ function StatusBadge(props: React.PropsWithChildren<StatusBadgeProps>) {
17
+ const {
18
+ children,
19
+ className,
20
+ id = generateUUID(),
21
+ level = StatusBadgeTypes.Low,
22
+ } = props;
23
+ const styles = useStyleConfig("StatusBadge", { variant: level });
21
24
 
22
- if (!props.children) {
23
- console.warn("Status Badge has no children");
24
- }
25
-
26
- if (level) {
27
- statusBadgeModifiers = [level];
25
+ if (!children) {
26
+ console.warn("Status Badge has no children.");
28
27
  }
29
28
 
30
29
  return (
31
- <div
32
- className={bem(baseClass, statusBadgeModifiers, blockName, [className])}
33
- >
34
- {props.children}
35
- </div>
30
+ <Box id={id} className={className} __css={styles}>
31
+ {children}
32
+ </Box>
36
33
  );
37
34
  }
35
+
36
+ export default StatusBadge;
@@ -0,0 +1,5 @@
1
+ export enum StatusBadgeTypes {
2
+ Low = "low",
3
+ Medium = "medium",
4
+ High = "high",
5
+ }
@@ -0,0 +1,28 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`StatusBadge renders the UI snapshot correctly 1`] = `
4
+ <div
5
+ className="css-0"
6
+ id="low"
7
+ >
8
+ Registration Required
9
+ </div>
10
+ `;
11
+
12
+ exports[`StatusBadge renders the UI snapshot correctly 2`] = `
13
+ <div
14
+ className="css-0"
15
+ id="medium"
16
+ >
17
+ Registration Required
18
+ </div>
19
+ `;
20
+
21
+ exports[`StatusBadge renders the UI snapshot correctly 3`] = `
22
+ <div
23
+ className="css-0"
24
+ id="high"
25
+ >
26
+ Registration Required
27
+ </div>
28
+ `;
@@ -1,13 +1,15 @@
1
1
  import { Meta, Canvas } from "@storybook/addon-docs/blocks";
2
+
2
3
  import SearchBar from "../SearchBar/SearchBar";
3
4
  import Input from "../Input/Input";
4
5
  import { InputTypes } from "../Input/InputTypes";
5
6
  import Icon from "../Icons/Icon";
6
- import { IconNames } from "../Icons/IconTypes";
7
+ import { IconNames, IconSizes, IconAlign } from "../Icons/IconTypes";
7
8
  import Button from "../Button/Button";
8
9
  import { ButtonTypes } from "../Button/ButtonTypes";
9
10
  import HelperErrorText from "../HelperErrorText/HelperErrorText";
10
11
  import { getCategory } from "../../utils/componentCategories";
12
+ import DSProvider from "../../theme/provider";
11
13
 
12
14
  <Meta title={getCategory("Bidirectionality")} />
13
15
 
@@ -115,97 +117,111 @@ won't hurt.
115
117
  #1 - Left to right default
116
118
 
117
119
  <Canvas>
118
- <div style={{ width: "400px" }}>
119
- <SearchBar>
120
- <Input
121
- ariaLabelledBy="button-ex1"
122
- id="input-ex1"
123
- placeholder="Item Search"
124
- required={true}
125
- type={InputTypes.text}
126
- attributes={{
127
- ["aria-describedby"]: "error-helperText-ex1",
128
- }}
129
- />
130
- <Button buttonType={ButtonTypes.Primary} id="button-ex1" type="submit">
131
- <Icon
132
- name={IconNames.search}
133
- decorative={true}
134
- modifiers={["small", "icon-left"]}
135
- />
136
- Search
137
- </Button>
138
- </SearchBar>
139
- <HelperErrorText id="error-helperText-ex1">
140
- Use a keyword or phrase to search!
141
- </HelperErrorText>
142
- </div>
143
- </Canvas>
144
-
145
- #2 - Right to left using `dir="rtl"`. Click on "Show code" in the following
146
- block to see its code implementation.
147
-
148
- <Canvas>
149
- <div dir="rtl">
120
+ <DSProvider>
150
121
  <div style={{ width: "400px" }}>
151
122
  <SearchBar>
152
123
  <Input
153
- ariaLabelledBy="button-ex2"
154
- id="input-ex2"
155
- placeholder="البحث عن عنصر"
124
+ ariaLabelledBy="button-ex1"
125
+ id="input-ex1"
126
+ placeholder="Item Search"
156
127
  required={true}
157
128
  type={InputTypes.text}
158
129
  attributes={{
159
- ["aria-describedby"]: "error-helperText-ex2",
130
+ ["aria-describedby"]: "error-helperText-ex1",
160
131
  }}
161
132
  />
162
- <Button buttonType={ButtonTypes.Primary} id="button-ex2" type="submit">
133
+ <Button buttonType={ButtonTypes.Primary} id="button-ex1" type="submit">
163
134
  <Icon
164
- name={IconNames.search}
165
- decorative={true}
166
- modifiers={["small", "icon-left"]}
135
+ name={IconNames.Search}
136
+ size={IconSizes.Small}
137
+ align={IconAlign.Left}
167
138
  />
168
- يبحث
139
+ Search
169
140
  </Button>
170
141
  </SearchBar>
171
- <HelperErrorText id="error-helperText-ex2">
172
- استخدم كلمة رئيسية أو عبارة للبحث!
142
+ <HelperErrorText id="error-helperText-ex1">
143
+ Use a keyword or phrase to search!
173
144
  </HelperErrorText>
174
145
  </div>
175
- </div>
146
+ </DSProvider>
147
+ </Canvas>
148
+
149
+ #2 - Right to left using `dir="rtl"`. Click on "Show code" in the following
150
+ block to see its code implementation.
151
+
152
+ <Canvas>
153
+ <DSProvider>
154
+ <div dir="rtl">
155
+ <div style={{ width: "400px" }}>
156
+ <SearchBar>
157
+ <Input
158
+ ariaLabelledBy="button-ex2"
159
+ id="input-ex2"
160
+ placeholder="البحث عن عنصر"
161
+ required={true}
162
+ type={InputTypes.text}
163
+ attributes={{
164
+ ["aria-describedby"]: "error-helperText-ex2",
165
+ }}
166
+ />
167
+ <Button
168
+ buttonType={ButtonTypes.Primary}
169
+ id="button-ex2"
170
+ type="submit"
171
+ >
172
+ <Icon
173
+ name={IconNames.Search}
174
+ size={IconSizes.Small}
175
+ align={IconAlign.Left}
176
+ />
177
+ يبحث
178
+ </Button>
179
+ </SearchBar>
180
+ <HelperErrorText id="error-helperText-ex2">
181
+ استخدم كلمة رئيسية أو عبارة للبحث!
182
+ </HelperErrorText>
183
+ </div>
184
+ </div>
185
+ </DSProvider>
176
186
  </Canvas>
177
187
 
178
188
  #3 - Right to left using `direction: rtl;`. Click on "Show code" in the following
179
189
  block to see its code implementation.
180
190
 
181
191
  <Canvas>
182
- <div style={{ direction: "rtl" }}>
183
- <div style={{ width: "400px" }}>
184
- <SearchBar>
185
- <Input
186
- ariaLabelledBy="button-ex3"
187
- id="input-ex3"
188
- placeholder="البحث عن عنصر"
189
- required={true}
190
- type={InputTypes.text}
191
- attributes={{
192
- ["aria-describedby"]: "error-helperText-ex3",
193
- }}
194
- />
195
- <Button buttonType={ButtonTypes.Primary} id="button-ex3" type="submit">
196
- <Icon
197
- name={IconNames.search}
198
- decorative={true}
199
- modifiers={["small", "icon-left"]}
192
+ <DSProvider>
193
+ <div style={{ direction: "rtl" }}>
194
+ <div style={{ width: "400px" }}>
195
+ <SearchBar>
196
+ <Input
197
+ ariaLabelledBy="button-ex3"
198
+ id="input-ex3"
199
+ placeholder="البحث عن عنصر"
200
+ required={true}
201
+ type={InputTypes.text}
202
+ attributes={{
203
+ ["aria-describedby"]: "error-helperText-ex3",
204
+ }}
200
205
  />
201
- يبحث
202
- </Button>
203
- </SearchBar>
204
- <HelperErrorText id="error-helperText-ex3">
205
- استخدم كلمة رئيسية أو عبارة للبحث!
206
- </HelperErrorText>
206
+ <Button
207
+ buttonType={ButtonTypes.Primary}
208
+ id="button-ex3"
209
+ type="submit"
210
+ >
211
+ <Icon
212
+ name={IconNames.Search}
213
+ size={IconSizes.Small}
214
+ align={IconAlign.Left}
215
+ />
216
+ يبحث
217
+ </Button>
218
+ </SearchBar>
219
+ <HelperErrorText id="error-helperText-ex3">
220
+ استخدم كلمة رئيسية أو عبارة للبحث!
221
+ </HelperErrorText>
222
+ </div>
207
223
  </div>
208
- </div>
224
+ </DSProvider>
209
225
  </Canvas>
210
226
 
211
227
  ## Component Updates
@@ -220,30 +236,36 @@ general, specifying an equal margin or padding to both sides of an element may
220
236
  help reduce any visual mistakes.
221
237
 
222
238
  <Canvas>
223
- <div style={{ display: "flex", "flex-direction": "column" }}>
224
- <div style={{ width: "300px" }}>
225
- A regular button:
226
- <Button buttonType={ButtonTypes.Primary} id="button-ex4" type="submit">
227
- <Icon
228
- name={IconNames.search}
229
- decorative={true}
230
- modifiers={["small", "icon-left"]}
231
- />
232
- Search
233
- </Button>
234
- </div>
235
- <div style={{ width: "300px" }}>
236
- A RTL button:
237
- <div dir="rtl">
238
- <Button buttonType={ButtonTypes.Primary} id="button-ex5" type="submit">
239
+ <DSProvider>
240
+ <div style={{ display: "flex", "flex-direction": "column" }}>
241
+ <div style={{ width: "300px" }}>
242
+ A regular button:
243
+ <Button buttonType={ButtonTypes.Primary} id="button-ex4" type="submit">
239
244
  <Icon
240
- name={IconNames.search}
241
- decorative={true}
242
- modifiers={["small", "icon-left"]}
245
+ name={IconNames.Search}
246
+ size={IconSizes.Small}
247
+ align={IconAlign.Left}
243
248
  />
244
249
  Search
245
250
  </Button>
246
251
  </div>
252
+ <div style={{ width: "300px" }}>
253
+ A RTL button:
254
+ <div dir="rtl">
255
+ <Button
256
+ buttonType={ButtonTypes.Primary}
257
+ id="button-ex5"
258
+ type="submit"
259
+ >
260
+ <Icon
261
+ name={IconNames.Search}
262
+ size={IconSizes.Small}
263
+ align={IconAlign.Left}
264
+ />
265
+ Search
266
+ </Button>
267
+ </div>
268
+ </div>
247
269
  </div>
248
- </div>
270
+ </DSProvider>
249
271
  </Canvas>
@@ -3,22 +3,22 @@ import {
3
3
  Story,
4
4
  Canvas,
5
5
  ArgsTable,
6
- Preview,
7
6
  Description,
8
7
  } from "@storybook/addon-docs/blocks";
9
8
  import { withDesign } from "storybook-addon-designs";
10
9
 
11
10
  import { getCategory } from "../../utils/componentCategories";
12
- import Button from "../Button/Button";
11
+ import Button, { ButtonGroup } from "../Button/Button";
13
12
  import { ButtonTypes } from "../Button/ButtonTypes";
14
13
  import Icon from "../Icons/Icon";
15
14
  import {
16
- IconColors,
17
15
  IconNames,
18
16
  IconRotationTypes,
19
17
  IconSizes,
18
+ IconAlign,
20
19
  } from "../Icons/IconTypes";
21
20
  import getCSSVariable from "../../helpers/getCSSVariable";
21
+ import DSProvider from "../../theme/provider";
22
22
 
23
23
  <Meta
24
24
  title={getCategory("Buttons")}
@@ -60,93 +60,88 @@ For information about using the `Button` component, please see below.
60
60
  - Buttons may have an icon on either the left or the right.
61
61
  - Buttons by default are blue. However, Donation buttons are red.
62
62
  - Buttons used for Back to Top actions have a Secondary button style with an arrow icon pointing up.
63
+ - When buttons are used in a set (where the user can move forward or backward), the `Primary` button is on the right and the `Secondary` button on the left (i.e. cancel = secondary, submit = primary).
63
64
 
64
65
  ## Spacing
65
66
 
66
67
  Buttons should use `--space-xs` (0.5rem) for spacing in situations where multiple buttons are aligned in horizontal or vertical layouts. Buttons should use `--space-l` (2rem) for all other spacing situations.
67
68
 
68
- <Preview>
69
- <div
70
- style={{
71
- display: "flex",
72
- }}
73
- >
74
- <Button
75
- buttonType={ButtonTypes.Primary}
76
- attributes={{
77
- style: {
78
- marginRight: getCSSVariable("--space-xs"),
79
- },
80
- }}
81
- >
82
- Button Text
83
- </Button>
84
- <Button
85
- buttonType={ButtonTypes.Primary}
86
- attributes={{
87
- style: {
88
- marginRight: getCSSVariable("--space-xs"),
89
- },
90
- }}
91
- >
92
- <Icon decorative modifiers={["small", "icon-left"]} name="search" />
93
- Button Text
94
- </Button>
95
- <Button
96
- buttonType={ButtonTypes.Primary}
97
- attributes={{
98
- style: {
99
- marginRight: getCSSVariable("--space-xs"),
100
- },
101
- }}
102
- >
103
- <Icon
104
- name={IconNames.close}
105
- decorative={true}
106
- size={IconSizes.medium}
107
- color={IconColors.ui_white}
108
- />
109
- </Button>
110
- <Button
111
- buttonType={ButtonTypes.Primary}
112
- attributes={{
113
- style: {
114
- backgroundColor: getCSSVariable("--section-books-and-more-primary"),
115
- marginRight: getCSSVariable("--space-xs"),
116
- },
117
- }}
118
- >
119
- Button Text
120
- </Button>
121
- <Button buttonType={ButtonTypes.Secondary}>
122
- Back to Top
123
- <Icon
124
- name={IconNames.arrow}
125
- decorative={true}
126
- iconRotation={IconRotationTypes.rotate180}
127
- modifiers={["small", "icon-right"]}
128
- />
129
- </Button>
130
- </div>
131
- </Preview>
69
+ <Canvas>
70
+ <DSProvider>
71
+ <ButtonGroup>
72
+ <Button
73
+ buttonType={ButtonTypes.Primary}
74
+ attributes={{
75
+ style: {
76
+ marginRight: getCSSVariable("--space-xs"),
77
+ },
78
+ }}
79
+ >
80
+ Button Text
81
+ </Button>
82
+ <Button
83
+ buttonType={ButtonTypes.Primary}
84
+ attributes={{
85
+ style: {
86
+ marginRight: getCSSVariable("--space-xs"),
87
+ },
88
+ }}
89
+ >
90
+ <Icon
91
+ name={IconNames.Search}
92
+ size={IconSizes.Small}
93
+ align={IconAlign.Left}
94
+ />
95
+ Button Text
96
+ </Button>
97
+ <Button
98
+ buttonType={ButtonTypes.Primary}
99
+ attributes={{
100
+ style: {
101
+ marginRight: getCSSVariable("--space-xs"),
102
+ },
103
+ }}
104
+ >
105
+ <Icon name={IconNames.Close} size={IconSizes.Medium} />
106
+ </Button>
107
+ <Button
108
+ buttonType={ButtonTypes.Primary}
109
+ attributes={{
110
+ style: {
111
+ backgroundColor: getCSSVariable("--section-books-and-more-primary"),
112
+ marginRight: getCSSVariable("--space-xs"),
113
+ },
114
+ }}
115
+ >
116
+ Button Text
117
+ </Button>
118
+ <Button buttonType={ButtonTypes.Secondary}>
119
+ Back to Top
120
+ <Icon
121
+ name={IconNames.Arrow}
122
+ size={IconSizes.Small}
123
+ align={IconAlign.Right}
124
+ iconRotation={IconRotationTypes.Rotate180}
125
+ />
126
+ </Button>
127
+ </ButtonGroup>
128
+ </DSProvider>
129
+ </Canvas>
132
130
 
133
131
  ## Button Types
134
132
 
135
133
  The `buttonType` prop should be used to render various forms of the button component.
136
134
 
137
- <Preview>
138
- <div
139
- style={{
140
- display: "flex",
141
- justifyContent: "space-around",
142
- }}
143
- >
144
- <Button buttonType={ButtonTypes.Primary}>Primary Button</Button>
145
- <Button buttonType={ButtonTypes.Secondary}>Secondary Button</Button>
146
- <Button buttonType={ButtonTypes.Pill}>Pill Button</Button>
147
- <Button buttonType={ButtonTypes.Link}>Link Button</Button>
148
- </div>
149
- </Preview>
135
+ <Canvas>
136
+ <DSProvider>
137
+ <ButtonGroup>
138
+ <Button buttonType={ButtonTypes.Primary}>Primary Button</Button>
139
+ <Button buttonType={ButtonTypes.Secondary}>Secondary Button</Button>
140
+ <Button buttonType={ButtonTypes.Pill}>Pill Button</Button>
141
+ <Button buttonType={ButtonTypes.Link}>Link Button</Button>
142
+ </ButtonGroup>
143
+ </DSProvider>
144
+ </Canvas>
150
145
 
151
146
  ### ButtonTypes.Primary
152
147
 
@@ -176,26 +171,29 @@ Buttons are blue by default but should be red when it is intended as a call out.
176
171
  The "Back to Top" button must be of `ButtonTypes` `Secondary` and must include an up arrow icon.
177
172
 
178
173
  <Canvas>
179
- <Button
180
- buttonType={ButtonTypes.Primary}
181
- attributes={{
182
- style: {
183
- backgroundColor: getCSSVariable("--section-books-and-more-primary"),
184
- },
185
- }}
186
- >
187
- Donate to this library
188
- </Button>
189
- <br />
190
- <Button buttonType={ButtonTypes.Secondary}>
191
- Back to Top
192
- <Icon
193
- name={IconNames.arrow}
194
- decorative={true}
195
- iconRotation={IconRotationTypes.rotate180}
196
- modifiers={["small", "icon-right"]}
197
- />
198
- </Button>
174
+ <DSProvider>
175
+ <ButtonGroup>
176
+ <Button
177
+ buttonType={ButtonTypes.Primary}
178
+ attributes={{
179
+ style: {
180
+ backgroundColor: getCSSVariable("--section-books-and-more-primary"),
181
+ },
182
+ }}
183
+ >
184
+ Donate to this library
185
+ </Button>
186
+ <Button buttonType={ButtonTypes.Secondary}>
187
+ Back to Top
188
+ <Icon
189
+ name={IconNames.Arrow}
190
+ iconRotation={IconRotationTypes.Rotate180}
191
+ size={IconSizes.Small}
192
+ align={IconAlign.Right}
193
+ />
194
+ </Button>
195
+ </ButtonGroup>
196
+ </DSProvider>
199
197
  </Canvas>
200
198
 
201
199
  ## Figma Reference