@nypl/design-system-react-components 0.25.2 → 0.25.6

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 (238) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +47 -11
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  5. package/dist/components/Button/Button.d.ts +9 -8
  6. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  7. package/dist/components/Card/Card.d.ts +36 -52
  8. package/dist/components/Card/CardTypes.d.ts +0 -15
  9. package/dist/components/Checkbox/Checkbox.d.ts +8 -9
  10. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +2 -2
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -36
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +4 -0
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -3
  15. package/dist/components/Icons/Icon.d.ts +4 -0
  16. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  17. package/dist/components/Icons/IconTypes.d.ts +11 -0
  18. package/dist/components/Image/Image.d.ts +19 -9
  19. package/dist/components/Image/ImageTypes.d.ts +20 -0
  20. package/dist/components/Link/Link.d.ts +4 -0
  21. package/dist/components/List/List.d.ts +7 -1
  22. package/dist/components/Notification/Notification.d.ts +6 -4
  23. package/dist/components/Pagination/Pagination.d.ts +16 -13
  24. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  25. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  27. package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
  28. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  30. package/dist/components/Slider/Slider.d.ts +57 -0
  31. package/dist/components/Tabs/Tabs.d.ts +1 -1
  32. package/dist/components/TextInput/TextInput.d.ts +10 -0
  33. package/dist/design-system-react-components.cjs.development.js +3058 -936
  34. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  35. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  36. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  37. package/dist/design-system-react-components.esm.js +3049 -921
  38. package/dist/design-system-react-components.esm.js.map +1 -1
  39. package/dist/index.d.ts +12 -6
  40. package/dist/resources.scss +180 -170
  41. package/dist/styles.css +1 -1
  42. package/dist/theme/components/breadcrumb.d.ts +9 -0
  43. package/dist/theme/components/button.d.ts +22 -8
  44. package/dist/theme/components/card.d.ts +168 -0
  45. package/dist/theme/components/checkbox.d.ts +5 -1
  46. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  47. package/dist/theme/components/datePicker.d.ts +16 -0
  48. package/dist/theme/components/fieldset.d.ts +27 -0
  49. package/dist/theme/components/global.d.ts +23 -13
  50. package/dist/theme/components/globalMixins.d.ts +9 -1
  51. package/dist/theme/components/heading.d.ts +5 -0
  52. package/dist/theme/components/image.d.ts +31 -0
  53. package/dist/theme/components/label.d.ts +5 -3
  54. package/dist/theme/components/link.d.ts +4 -0
  55. package/dist/theme/components/list.d.ts +5 -1
  56. package/dist/theme/components/notification.d.ts +4 -14
  57. package/dist/theme/components/pagination.d.ts +19 -0
  58. package/dist/theme/components/progressIndicator.d.ts +50 -0
  59. package/dist/theme/components/radioGroup.d.ts +12 -0
  60. package/dist/theme/components/select.d.ts +11 -2
  61. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  62. package/dist/theme/components/slider.d.ts +51 -0
  63. package/dist/theme/components/textInput.d.ts +8 -0
  64. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  65. package/dist/theme/foundations/global.d.ts +6 -1
  66. package/package.json +72 -84
  67. package/src/__tests__/setup.ts +2 -2
  68. package/src/components/Accordion/Accordion.stories.mdx +39 -42
  69. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  70. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -0
  71. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  72. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +24 -8
  73. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +33 -0
  74. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  75. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  76. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +298 -1
  77. package/src/components/Button/Button.stories.mdx +15 -10
  78. package/src/components/Button/Button.test.tsx +21 -7
  79. package/src/components/Button/Button.tsx +18 -33
  80. package/src/components/Button/ButtonTypes.tsx +1 -0
  81. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  82. package/src/components/Card/Card.stories.mdx +296 -259
  83. package/src/components/Card/Card.test.tsx +156 -84
  84. package/src/components/Card/Card.tsx +195 -145
  85. package/src/components/Card/CardTypes.tsx +0 -17
  86. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  87. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  88. package/src/components/CardEdition/_CardEdition.scss +22 -23
  89. package/src/components/Chakra/Box.stories.mdx +14 -15
  90. package/src/components/Chakra/Center.stories.mdx +15 -8
  91. package/src/components/Chakra/Grid.stories.mdx +16 -7
  92. package/src/components/Chakra/Stack.stories.mdx +35 -18
  93. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  94. package/src/components/Checkbox/Checkbox.test.tsx +30 -3
  95. package/src/components/Checkbox/Checkbox.tsx +27 -27
  96. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  98. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +1 -1
  99. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -15
  100. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +44 -80
  101. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  102. package/src/components/DatePicker/DatePicker.test.tsx +248 -65
  103. package/src/components/DatePicker/DatePicker.tsx +158 -130
  104. package/src/components/DatePicker/_DatePicker.scss +33 -67
  105. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  106. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  107. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  108. package/src/components/Fieldset/Fieldset.tsx +52 -0
  109. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  110. package/src/components/Form/Form.stories.mdx +4 -5
  111. package/src/components/Form/Form.tsx +1 -0
  112. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  113. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  114. package/src/components/Heading/Heading.stories.mdx +3 -4
  115. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +1 -1
  116. package/src/components/HelperErrorText/HelperErrorText.tsx +5 -1
  117. package/src/components/Hero/HeroTypes.tsx +1 -0
  118. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  119. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -5
  120. package/src/components/HorizontalRule/HorizontalRule.test.tsx +17 -0
  121. package/src/components/HorizontalRule/HorizontalRule.tsx +21 -4
  122. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +5 -5
  123. package/src/components/Icons/Icon.stories.mdx +11 -3
  124. package/src/components/Icons/Icon.test.tsx +18 -0
  125. package/src/components/Icons/Icon.tsx +6 -0
  126. package/src/components/Icons/IconSvgs.tsx +22 -0
  127. package/src/components/Icons/IconTypes.tsx +11 -0
  128. package/src/components/Image/Image.stories.mdx +220 -0
  129. package/src/components/Image/Image.test.tsx +131 -29
  130. package/src/components/Image/Image.tsx +84 -56
  131. package/src/components/Image/ImageTypes.ts +22 -0
  132. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  133. package/src/components/Input/Input.stories.tsx +20 -64
  134. package/src/components/Input/_Input.scss +23 -14
  135. package/src/components/Link/Link.tsx +4 -1
  136. package/src/components/List/List.stories.mdx +1 -1
  137. package/src/components/List/List.tsx +11 -4
  138. package/src/components/Modal/Modal.stories.mdx +3 -3
  139. package/src/components/Modal/_Modal.scss +2 -2
  140. package/src/components/Notification/Notification.stories.mdx +1 -3
  141. package/src/components/Notification/Notification.tsx +24 -9
  142. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +2 -0
  143. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  144. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  145. package/src/components/Pagination/Pagination.test.tsx +276 -146
  146. package/src/components/Pagination/Pagination.tsx +174 -154
  147. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  148. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  149. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  150. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  151. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  152. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  153. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  154. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  155. package/src/components/RadioGroup/RadioGroup.tsx +11 -16
  156. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +39 -71
  157. package/src/components/SearchBar/SearchBar.Test.tsx +66 -21
  158. package/src/components/SearchBar/SearchBar.stories.mdx +114 -10
  159. package/src/components/SearchBar/SearchBar.tsx +15 -5
  160. package/src/components/Select/SelectTypes.tsx +1 -0
  161. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  162. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  163. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  164. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  165. package/src/components/Slider/Slider.stories.mdx +529 -0
  166. package/src/components/Slider/Slider.test.tsx +653 -0
  167. package/src/components/Slider/Slider.tsx +303 -0
  168. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  169. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  170. package/src/components/StyleGuide/Breakpoints.stories.mdx +21 -7
  171. package/src/components/StyleGuide/Buttons.stories.mdx +69 -15
  172. package/src/components/StyleGuide/ColorCard.tsx +0 -1
  173. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  174. package/src/components/StyleGuide/Iconography.stories.mdx +51 -62
  175. package/src/components/Tabs/Tabs.tsx +5 -5
  176. package/src/components/Template/Template.stories.mdx +11 -16
  177. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  178. package/src/components/TextInput/TextInput.tsx +23 -6
  179. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  180. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -3
  181. package/src/docs/Chakra.stories.mdx +2 -2
  182. package/src/index.ts +20 -12
  183. package/src/resources.scss +5 -5
  184. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  185. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  186. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  187. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  188. package/src/styles/base/_place-holder.scss +14 -3
  189. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  190. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  191. package/src/styles/space/_space-stack.scss +116 -0
  192. package/src/styles.scss +13 -55
  193. package/src/theme/components/breadcrumb.ts +10 -0
  194. package/src/theme/components/button.ts +18 -12
  195. package/src/theme/components/card.ts +174 -0
  196. package/src/theme/components/checkbox.ts +7 -2
  197. package/src/theme/components/checkboxGroup.ts +8 -0
  198. package/src/theme/components/datePicker.ts +17 -0
  199. package/src/theme/components/fieldset.ts +18 -0
  200. package/src/theme/components/global.ts +26 -15
  201. package/src/theme/components/globalMixins.ts +9 -1
  202. package/src/theme/components/heading.ts +5 -0
  203. package/src/theme/components/image.ts +116 -0
  204. package/src/theme/components/label.ts +3 -10
  205. package/src/theme/components/link.ts +4 -0
  206. package/src/theme/components/list.ts +6 -3
  207. package/src/theme/components/notification.ts +12 -14
  208. package/src/theme/components/pagination.ts +20 -0
  209. package/src/theme/components/progressIndicator.ts +62 -0
  210. package/src/theme/components/radioGroup.ts +8 -0
  211. package/src/theme/components/select.ts +5 -2
  212. package/src/theme/components/skeletonLoader.ts +107 -0
  213. package/src/theme/components/slider.ts +79 -0
  214. package/src/theme/components/textInput.ts +2 -0
  215. package/src/theme/foundations/breakpoints.ts +8 -8
  216. package/src/theme/foundations/global.ts +6 -1
  217. package/src/theme/index.ts +22 -4
  218. package/src/utils/componentCategories.ts +4 -3
  219. package/dist/components/Image/Image.stories.d.ts +0 -18
  220. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  221. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  222. package/src/components/Button/_Button.scss +0 -32
  223. package/src/components/Card/_Card.scss +0 -308
  224. package/src/components/Image/Image.stories.tsx +0 -54
  225. package/src/components/Image/_Image.scss +0 -38
  226. package/src/components/Pagination/_Pagination.scss +0 -40
  227. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  228. package/src/styles/01-colors/_colors-brand.scss +0 -62
  229. package/src/styles/01-colors/_colors-utility.scss +0 -67
  230. package/src/styles/02-typography/_type-scale.css +0 -11
  231. package/src/styles/02-typography/_type-weight.css +0 -7
  232. package/src/styles/02-typography/_typefaces.css +0 -4
  233. package/src/styles/03-space/_space-stack.scss +0 -116
  234. package/src/styles/03-space/_space.css +0 -30
  235. package/src/styles/base/_card-grid.scss +0 -77
  236. package/src/styles/base/_typography.scss +0 -11
  237. package/src/theme/components/customCheckboxGroup.ts +0 -12
  238. package/src/theme/components/customRadioGroup.ts +0 -12
@@ -6,14 +6,15 @@ import {
6
6
  Description,
7
7
  } from "@storybook/addon-docs/blocks";
8
8
  import { withDesign } from "storybook-addon-designs";
9
+ import { ButtonGroup } from "@chakra-ui/react";
9
10
 
10
- import Button, { ButtonGroup } from "./Button";
11
+ import Button from "./Button";
11
12
  import { ButtonTypes } from "./ButtonTypes";
12
13
  import Icon from "../Icons/Icon";
13
14
  import {
15
+ IconAlign,
14
16
  IconNames,
15
17
  IconRotationTypes,
16
- IconAlign,
17
18
  IconSizes,
18
19
  } from "../Icons/IconTypes";
19
20
  import getCSSVariable from "../../helpers/getCSSVariable";
@@ -27,8 +28,7 @@ import DSProvider from "../../theme/provider";
27
28
  parameters={{
28
29
  design: {
29
30
  type: "figma",
30
- url:
31
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11477%3A2298",
31
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11477%3A2298",
32
32
  },
33
33
  jest: ["Button.test.tsx"],
34
34
  }}
@@ -39,7 +39,7 @@ import DSProvider from "../../theme/provider";
39
39
  | Component Version | DS Version |
40
40
  | ----------------- | ---------- |
41
41
  | Added | `0.0.4` |
42
- | Latest | `0.25.0` |
42
+ | Latest | `0.25.4` |
43
43
 
44
44
  <Description of={Button} />
45
45
 
@@ -48,11 +48,15 @@ that can be rendered.
48
48
 
49
49
  - `ButtonTypes.Primary` is used for actions that move the user forward.
50
50
  - `ButtonTypes.Secondary` is used for actions that move the user back, such as cancellations.
51
+ - `ButtonTypes.Callout` is used for call to action text such as "Donate".
51
52
  - `ButtonTypes.Pill` is used for equally weighted actions within cards and always in a set.
52
53
  - `ButtonTypes.Link` is used for equally weighted actions in a text based list.
54
+ - `ButtonTypes.SearchBar` is a variant only used in the `SearchBar` component.
55
+ - `ButtonTypes.NoBrand` is a variant used when there is no brand and will display
56
+ the background color as black.
53
57
 
54
- When one and only one `Icon` component is passed inside a `Button` component,
55
- it will automatically be configured to use the `"icon-only"` type.
58
+ When one and only one `Icon` component is passed inside a `Button` component with
59
+ no text, it will automatically be configured to use the `"iconOnly"` type.
56
60
 
57
61
  <Canvas withToolbar>
58
62
  <Story name="Basic">{(args) => <Button {...args}>Button Text</Button>}</Story>
@@ -227,17 +231,18 @@ The different `ButtonTypes` modified by the `buttonType` prop:
227
231
  <Button buttonType={ButtonTypes.Callout}>Callout</Button>
228
232
  <Button buttonType={ButtonTypes.Pill}>Pill</Button>
229
233
  <Button buttonType={ButtonTypes.Link}>Link</Button>
234
+ <Button buttonType={ButtonTypes.NoBrand}>NoBrand</Button>
230
235
  </ButtonGroup>
231
236
  </DSProvider>
232
237
  </Canvas>
233
238
 
234
- Modifying the `disabled` prop:
239
+ Modifying the `isDisabled` prop:
235
240
 
236
241
  <Canvas>
237
242
  <DSProvider>
238
243
  <ButtonGroup>
239
- <Button disabled={false}>Enabled</Button>
240
- <Button disabled={true}>Disabled</Button>
244
+ <Button isDisabled={false}>Enabled</Button>
245
+ <Button isDisabled>isDisabled</Button>
241
246
  </ButtonGroup>
242
247
  </DSProvider>
243
248
  </Canvas>
@@ -23,7 +23,6 @@ describe("Button Accessibility", () => {
23
23
 
24
24
  describe("Button", () => {
25
25
  let onClick;
26
- let container;
27
26
  let rerender;
28
27
 
29
28
  beforeEach(() => {
@@ -33,7 +32,6 @@ describe("Button", () => {
33
32
  Submit
34
33
  </Button>
35
34
  );
36
- container = utils.container;
37
35
  rerender = utils.rerender;
38
36
  });
39
37
 
@@ -47,10 +45,6 @@ describe("Button", () => {
47
45
  expect(screen.getByText("Submit")).toBeInTheDocument();
48
46
  });
49
47
 
50
- it("has 'button' class", () => {
51
- expect(container.querySelector(".button")).toBeInTheDocument();
52
- });
53
-
54
48
  it("optionally calls the onClick on mouseDown instead of on click", () => {
55
49
  expect(onClick).toHaveBeenCalledTimes(0);
56
50
  rerender(
@@ -100,7 +94,7 @@ describe("padding for icon only button", () => {
100
94
  />
101
95
  </Button>
102
96
  );
103
- expect(container.querySelector(".button svg")).toBeInTheDocument();
97
+ expect(container.querySelector("button svg")).toBeInTheDocument();
104
98
  });
105
99
  });
106
100
 
@@ -113,6 +107,13 @@ describe("Button Snapshot", () => {
113
107
  </Button>
114
108
  )
115
109
  .toJSON();
110
+ const disabled = renderer
111
+ .create(
112
+ <Button id="button" onClick={jest.fn()} isDisabled>
113
+ Disabled
114
+ </Button>
115
+ )
116
+ .toJSON();
116
117
  const secondary = renderer
117
118
  .create(
118
119
  <Button
@@ -160,12 +161,25 @@ describe("Button Snapshot", () => {
160
161
  </Button>
161
162
  )
162
163
  .toJSON();
164
+ const noBrand = renderer
165
+ .create(
166
+ <Button
167
+ id="button"
168
+ onClick={jest.fn()}
169
+ buttonType={ButtonTypes.NoBrand}
170
+ >
171
+ NoBrand
172
+ </Button>
173
+ )
174
+ .toJSON();
163
175
 
164
176
  expect(primary).toMatchSnapshot();
177
+ expect(disabled).toMatchSnapshot();
165
178
  expect(secondary).toMatchSnapshot();
166
179
  expect(callout).toMatchSnapshot();
167
180
  expect(pill).toMatchSnapshot();
168
181
  expect(link).toMatchSnapshot();
169
182
  expect(searchBar).toMatchSnapshot();
183
+ expect(noBrand).toMatchSnapshot();
170
184
  });
171
185
  });
@@ -1,13 +1,10 @@
1
1
  import * as React from "react";
2
- import {
3
- Button as ChakraButton,
4
- ButtonGroup,
5
- useStyleConfig,
6
- } from "@chakra-ui/react";
2
+ import { Button as ChakraButton, useStyleConfig } from "@chakra-ui/react";
7
3
 
8
- import bem from "../../utils/bem";
9
4
  import { ButtonTypes } from "./ButtonTypes";
10
5
  import Icon from "../Icons/Icon";
6
+ import { getVariant } from "../../utils/utils";
7
+ import generateUUID from "../../helpers/generateUUID";
11
8
 
12
9
  type ButtonElementType = "submit" | "button" | "reset";
13
10
 
@@ -18,35 +15,24 @@ interface ButtonProps {
18
15
  attributes?: { [key: string]: any };
19
16
  /** The kind of button assigned through the `ButtonTypes` enum */
20
17
  buttonType?: ButtonTypes;
21
- /** Additional className for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
18
+ /** Additional className to use. */
22
19
  className?: string;
23
- /** Adds 'disabled' property to the button */
24
- disabled?: boolean;
25
20
  /** ID that other components can cross reference for accessibility purposes */
26
21
  id?: string;
27
- /** Trigger the Button's action through the `mouseDown` event handler instead of `onClick`. `false` by default. */
22
+ /** Adds 'disabled' property to the button */
23
+ isDisabled?: boolean;
24
+ /** Trigger the Button's action through the `mouseDown` event handler instead
25
+ * of `onClick`. `false` by default. */
28
26
  mouseDown?: boolean;
29
27
  /** The action to perform on the `<button>`'s onClick function */
30
28
  onClick?: (event: React.MouseEvent | React.KeyboardEvent) => void;
31
- /** The html button attribute */
29
+ /** The HTML button type attribute. */
32
30
  type?: ButtonElementType;
33
31
  }
34
32
 
35
- // Used to map between ButtonTypes enum values and Chakra variant options.
36
- const variantMap = {};
37
- for (const type in ButtonTypes) {
38
- variantMap[ButtonTypes[type]] = ButtonTypes[type];
39
- }
40
-
41
33
  /**
42
- * Map the ButtonType to the Button Chakra theme variant object. If a wrong
43
- * value is passed (typically in non-Typescript scenarios), then the default
44
- * is the "primary" variant.
34
+ * Renders a simple `button` element with custom variant styles.
45
35
  */
46
- const getVariant = (buttonType) =>
47
- variantMap[buttonType] || ButtonTypes.Primary;
48
-
49
- /** Renders a simple `button` element with custom classes and modifiers. */
50
36
  function Button(props: React.PropsWithChildren<ButtonProps>) {
51
37
  const {
52
38
  additionalStyles = {},
@@ -54,18 +40,17 @@ function Button(props: React.PropsWithChildren<ButtonProps>) {
54
40
  buttonType,
55
41
  children,
56
42
  className = "",
57
- disabled,
58
- id,
43
+ isDisabled,
44
+ id = generateUUID(),
59
45
  mouseDown = false,
60
46
  onClick,
61
47
  type = "button",
62
48
  } = props;
63
- const baseClass = "button";
64
49
  const btnCallback = mouseDown ? { onMouseDown: onClick } : { onClick };
65
50
  let childCount = 0;
66
51
  let hasIcon = false;
67
52
  let variant;
68
- let styles;
53
+ let styles = {};
69
54
 
70
55
  React.Children.map(children, (child: React.ReactElement) => {
71
56
  childCount++;
@@ -80,9 +65,9 @@ function Button(props: React.PropsWithChildren<ButtonProps>) {
80
65
  });
81
66
 
82
67
  if (childCount === 1 && hasIcon) {
83
- variant = "icon-only";
68
+ variant = "iconOnly";
84
69
  } else {
85
- variant = getVariant(buttonType);
70
+ variant = getVariant(buttonType, ButtonTypes, ButtonTypes.Primary);
86
71
  }
87
72
 
88
73
  styles = useStyleConfig("Button", { variant });
@@ -90,9 +75,10 @@ function Button(props: React.PropsWithChildren<ButtonProps>) {
90
75
  return (
91
76
  <ChakraButton
92
77
  id={id}
93
- className={bem(baseClass, [], "", [className])}
78
+ data-testid="button"
79
+ className={className}
94
80
  type={type}
95
- disabled={disabled}
81
+ isDisabled={isDisabled}
96
82
  __css={{ ...styles, ...additionalStyles }}
97
83
  {...attributes}
98
84
  {...btnCallback}
@@ -102,5 +88,4 @@ function Button(props: React.PropsWithChildren<ButtonProps>) {
102
88
  );
103
89
  }
104
90
 
105
- export { ButtonGroup };
106
91
  export default Button;
@@ -5,4 +5,5 @@ export enum ButtonTypes {
5
5
  Pill = "pill",
6
6
  Link = "link",
7
7
  SearchBar = "searchBar",
8
+ NoBrand = "noBrand",
8
9
  }
@@ -2,7 +2,8 @@
2
2
 
3
3
  exports[`Button Snapshot Renders the UI snapshot correctly 1`] = `
4
4
  <button
5
- className="chakra-button button css-0"
5
+ className="chakra-button css-0"
6
+ data-testid="button"
6
7
  id="button"
7
8
  onClick={[MockFunction]}
8
9
  type="button"
@@ -13,51 +14,69 @@ exports[`Button Snapshot Renders the UI snapshot correctly 1`] = `
13
14
 
14
15
  exports[`Button Snapshot Renders the UI snapshot correctly 2`] = `
15
16
  <button
16
- className="chakra-button button css-0"
17
+ className="chakra-button css-0"
18
+ data-testid="button"
19
+ disabled={true}
17
20
  id="button"
18
21
  onClick={[MockFunction]}
19
22
  type="button"
20
23
  >
21
- Seconday
24
+ Disabled
22
25
  </button>
23
26
  `;
24
27
 
25
28
  exports[`Button Snapshot Renders the UI snapshot correctly 3`] = `
26
29
  <button
27
- className="chakra-button button css-0"
30
+ className="chakra-button css-0"
31
+ data-testid="button"
28
32
  id="button"
29
33
  onClick={[MockFunction]}
30
34
  type="button"
31
35
  >
32
- Callout
36
+ Seconday
33
37
  </button>
34
38
  `;
35
39
 
36
40
  exports[`Button Snapshot Renders the UI snapshot correctly 4`] = `
37
41
  <button
38
- className="chakra-button button css-0"
42
+ className="chakra-button css-0"
43
+ data-testid="button"
39
44
  id="button"
40
45
  onClick={[MockFunction]}
41
46
  type="button"
42
47
  >
43
- Pill
48
+ Callout
44
49
  </button>
45
50
  `;
46
51
 
47
52
  exports[`Button Snapshot Renders the UI snapshot correctly 5`] = `
48
53
  <button
49
- className="chakra-button button css-0"
54
+ className="chakra-button css-0"
55
+ data-testid="button"
50
56
  id="button"
51
57
  onClick={[MockFunction]}
52
58
  type="button"
53
59
  >
54
- Link
60
+ Pill
55
61
  </button>
56
62
  `;
57
63
 
58
64
  exports[`Button Snapshot Renders the UI snapshot correctly 6`] = `
59
65
  <button
60
- className="chakra-button button css-0"
66
+ className="chakra-button css-0"
67
+ data-testid="button"
68
+ id="button"
69
+ onClick={[MockFunction]}
70
+ type="button"
71
+ >
72
+ Link
73
+ </button>
74
+ `;
75
+
76
+ exports[`Button Snapshot Renders the UI snapshot correctly 7`] = `
77
+ <button
78
+ className="chakra-button css-0"
79
+ data-testid="button"
61
80
  id="button"
62
81
  onClick={[MockFunction]}
63
82
  type="button"
@@ -65,3 +84,15 @@ exports[`Button Snapshot Renders the UI snapshot correctly 6`] = `
65
84
  SearchBar
66
85
  </button>
67
86
  `;
87
+
88
+ exports[`Button Snapshot Renders the UI snapshot correctly 8`] = `
89
+ <button
90
+ className="chakra-button css-0"
91
+ data-testid="button"
92
+ id="button"
93
+ onClick={[MockFunction]}
94
+ type="button"
95
+ >
96
+ NoBrand
97
+ </button>
98
+ `;