@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,108 +1,109 @@
1
1
  import * as React from "react";
2
- import bem from "../../utils/bem";
3
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
4
- import Label from "../Label/Label";
2
+ import {
3
+ Box,
4
+ Radio as ChakraRadio,
5
+ useMultiStyleConfig,
6
+ } from "@chakra-ui/react";
7
+
5
8
  import generateUUID from "../../helpers/generateUUID";
9
+ import HelperErrorText from "../HelperErrorText/HelperErrorText";
6
10
 
7
11
  export interface RadioProps {
8
- /** The radio button's label. This will serve as the text content for a `<label>` element if `showlabel` is true, or an "aria-label" if `showLabel` is false. */
9
- labelText: string;
10
- /** Additional attributes to pass to the `<input>` tag */
11
- attributes?: { [key: string]: any };
12
- /** When using the Radio as a "controlled" form element, you can specify the Radio's checked state using this prop. Learn more about controlled and uncontrolled form fields: https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ */
13
- checked?: boolean;
14
- /** className you can add in addition to 'input' */
12
+ /** Additional class name. */
15
13
  className?: string;
16
- /** Adds the 'disabled' prop to the input when true */
17
- disabled?: boolean;
18
- /** Helper for modifiers array; adds 'errored' styling */
19
- errored?: boolean;
20
- /** Optional string to populate the HelperErrorText for error state */
21
- errorText?: string;
22
- /** Optional string to populate the HelperErrorText for standard state */
14
+ /** Optional string to populate the HelperErrorText for the error state
15
+ * when `isInvalid` is true.
16
+ */
17
+ invalidText?: string;
18
+ /** Optional string to populate the HelperErrorText for the standard state. */
23
19
  helperText?: string;
24
20
  /** ID that other components can cross reference for accessibility purposes */
25
21
  id?: string;
26
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
27
- modifiers?: string[];
28
- /** The name prop indicates into which group of radios this radio belongs. If none is specified, 'default' will be used */
22
+ /** When using the Radio as a "controlled" form element, you can specify the
23
+ * `Radio`'s checked state using this prop. You must also pass an onChange prop.
24
+ * Learn more about controlled and uncontrolled form fields: https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ */
25
+ isChecked?: boolean;
26
+ /** Adds the 'disabled' and `aria-disabled` attributes to the input when true.
27
+ * This also makes the text italic and color scheme gray.
28
+ */
29
+ isDisabled?: boolean;
30
+ /** Adds the 'aria-invalid' attribute to the input when true. This also makes
31
+ * the color theme "NYPL error" red for the button and text.
32
+ */
33
+ isInvalid?: boolean;
34
+ /** Adds the 'required' attribute to the input when true. */
35
+ isRequired?: boolean;
36
+ /** The radio button's label. This will serve as the text content for the
37
+ * `<label>` element if `showlabel` is true, or an "aria-label" if `showLabel`
38
+ * is false. */
39
+ labelText: string;
40
+ /** Used to reference the input element in forms. */
29
41
  name?: string;
30
- /** The action to perform on the `<input>`'s onChange function */
42
+ /** Should be passed along with `isChecked` for controlled components. */
31
43
  onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
32
- /** Offers the ability to show the radio's label onscreen or hide it. Refer to the `labelText` property for more information. */
33
- showLabel: boolean;
34
- /** Populates the value of the input */
44
+ /** Offers the ability to show the radio's label onscreen or hide it. Refer
45
+ * to the `labelText` property for more information. */
46
+ showLabel?: boolean;
47
+ /** Populates the value of the input. */
35
48
  value?: string;
36
49
  }
37
50
 
38
- export const onChangeDefault = () => {
39
- return;
40
- };
41
-
42
51
  const Radio = React.forwardRef<HTMLInputElement, RadioProps>((props, ref?) => {
43
52
  const {
44
- checked,
45
53
  className,
46
- disabled,
47
- errored,
48
- errorText,
54
+ invalidText,
49
55
  helperText,
50
- id,
56
+ id = generateUUID(),
57
+ isChecked,
58
+ isDisabled = false,
59
+ isInvalid = false,
60
+ isRequired = false,
51
61
  labelText,
52
62
  name,
53
- showLabel,
63
+ onChange,
64
+ showLabel = true,
54
65
  value,
55
66
  } = props;
56
-
57
- const attributes = props.attributes || {};
58
- const modifiers = props.modifiers ? props.modifiers : [];
59
- const radioID = id || generateUUID();
60
- const onChange = props.onChange || onChangeDefault;
61
-
62
- const footnote = errored ? errorText : helperText;
67
+ const styles = useMultiStyleConfig("Radio", {});
68
+ const footnote = isInvalid ? invalidText : helperText;
69
+ const attributes = {};
63
70
 
64
71
  if (!showLabel) {
65
72
  attributes["aria-label"] =
66
73
  labelText && footnote ? `${labelText} - ${footnote}` : labelText;
67
74
  } else {
68
- if (footnote) attributes["aria-describedby"] = `${radioID}-helperText`;
69
- }
70
-
71
- if (errored) {
72
- modifiers.push("error");
75
+ if (footnote) {
76
+ attributes["aria-describedby"] = `${id}-helperText`;
77
+ }
73
78
  }
74
79
 
75
80
  return (
76
81
  <>
77
- <input
78
- {...(checked !== undefined
79
- ? {
80
- checked: checked,
81
- onChange: onChange,
82
- }
83
- : {
84
- defaultChecked: false,
85
- })}
86
- className={bem("radio", modifiers, "", [className])}
87
- disabled={disabled}
88
- id={radioID}
89
- name={name || "default"}
90
- ref={ref}
91
- type="radio"
92
- value={value}
82
+ <ChakraRadio
83
+ className={className}
84
+ id={id}
85
+ isChecked={isChecked}
86
+ isDisabled={isDisabled}
87
+ isInvalid={isInvalid}
88
+ isRequired={isRequired}
89
+ name={name}
93
90
  onChange={onChange}
91
+ value={value}
92
+ ref={ref}
93
+ __css={styles}
94
94
  {...attributes}
95
- />
96
- {labelText && showLabel && <Label htmlFor={radioID}>{labelText}</Label>}
95
+ >
96
+ {showLabel && labelText}
97
+ </ChakraRadio>
97
98
  {footnote && showLabel && (
98
- <HelperErrorText isError={errored} id={id + `-helperText`}>
99
- {footnote}
100
- </HelperErrorText>
99
+ <Box __css={styles.helper} aria-disabled={isDisabled}>
100
+ <HelperErrorText isError={isInvalid} id={`${id}-helperText`}>
101
+ {footnote}
102
+ </HelperErrorText>
103
+ </Box>
101
104
  )}
102
105
  </>
103
106
  );
104
107
  });
105
108
 
106
- Radio.displayName = "Radio";
107
-
108
109
  export default Radio;
@@ -0,0 +1,250 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Radio Button renders the UI snapshot correctly 1`] = `
4
+ <label
5
+ className="chakra-radio css-78joka"
6
+ >
7
+ <input
8
+ checked={false}
9
+ className="chakra-radio__input"
10
+ disabled={false}
11
+ id="inputID"
12
+ onBlur={[Function]}
13
+ onChange={[Function]}
14
+ onFocus={[Function]}
15
+ onKeyDown={[Function]}
16
+ onKeyUp={[Function]}
17
+ required={false}
18
+ style={
19
+ Object {
20
+ "border": "0px",
21
+ "clip": "rect(0px, 0px, 0px, 0px)",
22
+ "height": "1px",
23
+ "margin": "-1px",
24
+ "overflow": "hidden",
25
+ "padding": "0px",
26
+ "position": "absolute",
27
+ "whiteSpace": "nowrap",
28
+ "width": "1px",
29
+ }
30
+ }
31
+ type="radio"
32
+ />
33
+ <span
34
+ aria-hidden={true}
35
+ className="css-ssalds"
36
+ onMouseDown={[Function]}
37
+ onMouseEnter={[Function]}
38
+ onMouseLeave={[Function]}
39
+ onMouseUp={[Function]}
40
+ />
41
+ <span
42
+ className="chakra-radio__label css-1y8kf23"
43
+ onMouseDown={[Function]}
44
+ onTouchStart={[Function]}
45
+ >
46
+ Test Label
47
+ </span>
48
+ </label>
49
+ `;
50
+
51
+ exports[`Radio Button renders the UI snapshot correctly 2`] = `
52
+ <label
53
+ className="chakra-radio css-78joka"
54
+ >
55
+ <input
56
+ checked={true}
57
+ className="chakra-radio__input"
58
+ disabled={false}
59
+ id="radio-checked"
60
+ onBlur={[Function]}
61
+ onChange={[Function]}
62
+ onFocus={[Function]}
63
+ onKeyDown={[Function]}
64
+ onKeyUp={[Function]}
65
+ required={false}
66
+ style={
67
+ Object {
68
+ "border": "0px",
69
+ "clip": "rect(0px, 0px, 0px, 0px)",
70
+ "height": "1px",
71
+ "margin": "-1px",
72
+ "overflow": "hidden",
73
+ "padding": "0px",
74
+ "position": "absolute",
75
+ "whiteSpace": "nowrap",
76
+ "width": "1px",
77
+ }
78
+ }
79
+ type="radio"
80
+ />
81
+ <span
82
+ aria-hidden={true}
83
+ className="css-ssalds"
84
+ data-checked=""
85
+ onMouseDown={[Function]}
86
+ onMouseEnter={[Function]}
87
+ onMouseLeave={[Function]}
88
+ onMouseUp={[Function]}
89
+ />
90
+ <span
91
+ className="chakra-radio__label css-1y8kf23"
92
+ data-checked=""
93
+ onMouseDown={[Function]}
94
+ onTouchStart={[Function]}
95
+ >
96
+ Test Label
97
+ </span>
98
+ </label>
99
+ `;
100
+
101
+ exports[`Radio Button renders the UI snapshot correctly 3`] = `
102
+ <label
103
+ className="chakra-radio css-78joka"
104
+ >
105
+ <input
106
+ aria-required={true}
107
+ checked={false}
108
+ className="chakra-radio__input"
109
+ disabled={false}
110
+ id="radio-required"
111
+ onBlur={[Function]}
112
+ onChange={[Function]}
113
+ onFocus={[Function]}
114
+ onKeyDown={[Function]}
115
+ onKeyUp={[Function]}
116
+ required={true}
117
+ style={
118
+ Object {
119
+ "border": "0px",
120
+ "clip": "rect(0px, 0px, 0px, 0px)",
121
+ "height": "1px",
122
+ "margin": "-1px",
123
+ "overflow": "hidden",
124
+ "padding": "0px",
125
+ "position": "absolute",
126
+ "whiteSpace": "nowrap",
127
+ "width": "1px",
128
+ }
129
+ }
130
+ type="radio"
131
+ />
132
+ <span
133
+ aria-hidden={true}
134
+ className="css-ssalds"
135
+ onMouseDown={[Function]}
136
+ onMouseEnter={[Function]}
137
+ onMouseLeave={[Function]}
138
+ onMouseUp={[Function]}
139
+ />
140
+ <span
141
+ className="chakra-radio__label css-1y8kf23"
142
+ onMouseDown={[Function]}
143
+ onTouchStart={[Function]}
144
+ >
145
+ Test Label
146
+ </span>
147
+ </label>
148
+ `;
149
+
150
+ exports[`Radio Button renders the UI snapshot correctly 4`] = `
151
+ <label
152
+ className="chakra-radio css-78joka"
153
+ >
154
+ <input
155
+ aria-invalid={true}
156
+ checked={false}
157
+ className="chakra-radio__input"
158
+ disabled={false}
159
+ id="radio-invalid"
160
+ onBlur={[Function]}
161
+ onChange={[Function]}
162
+ onFocus={[Function]}
163
+ onKeyDown={[Function]}
164
+ onKeyUp={[Function]}
165
+ required={false}
166
+ style={
167
+ Object {
168
+ "border": "0px",
169
+ "clip": "rect(0px, 0px, 0px, 0px)",
170
+ "height": "1px",
171
+ "margin": "-1px",
172
+ "overflow": "hidden",
173
+ "padding": "0px",
174
+ "position": "absolute",
175
+ "whiteSpace": "nowrap",
176
+ "width": "1px",
177
+ }
178
+ }
179
+ type="radio"
180
+ />
181
+ <span
182
+ aria-hidden={true}
183
+ className="css-ssalds"
184
+ data-invalid=""
185
+ onMouseDown={[Function]}
186
+ onMouseEnter={[Function]}
187
+ onMouseLeave={[Function]}
188
+ onMouseUp={[Function]}
189
+ />
190
+ <span
191
+ className="chakra-radio__label css-1y8kf23"
192
+ data-invalid=""
193
+ onMouseDown={[Function]}
194
+ onTouchStart={[Function]}
195
+ >
196
+ Test Label
197
+ </span>
198
+ </label>
199
+ `;
200
+
201
+ exports[`Radio Button renders the UI snapshot correctly 5`] = `
202
+ <label
203
+ className="chakra-radio css-78joka"
204
+ >
205
+ <input
206
+ aria-disabled={true}
207
+ checked={false}
208
+ className="chakra-radio__input"
209
+ disabled={true}
210
+ id="radio-disabled"
211
+ onBlur={[Function]}
212
+ onChange={[Function]}
213
+ onFocus={[Function]}
214
+ onKeyDown={[Function]}
215
+ onKeyUp={[Function]}
216
+ required={false}
217
+ style={
218
+ Object {
219
+ "border": "0px",
220
+ "clip": "rect(0px, 0px, 0px, 0px)",
221
+ "height": "1px",
222
+ "margin": "-1px",
223
+ "overflow": "hidden",
224
+ "padding": "0px",
225
+ "position": "absolute",
226
+ "whiteSpace": "nowrap",
227
+ "width": "1px",
228
+ }
229
+ }
230
+ type="radio"
231
+ />
232
+ <span
233
+ aria-hidden={true}
234
+ className="css-ssalds"
235
+ data-disabled=""
236
+ onMouseDown={[Function]}
237
+ onMouseEnter={[Function]}
238
+ onMouseLeave={[Function]}
239
+ onMouseUp={[Function]}
240
+ />
241
+ <span
242
+ className="chakra-radio__label css-1y8kf23"
243
+ data-disabled=""
244
+ onMouseDown={[Function]}
245
+ onTouchStart={[Function]}
246
+ >
247
+ Test Label
248
+ </span>
249
+ </label>
250
+ `;
@@ -0,0 +1,247 @@
1
+ import {
2
+ Meta,
3
+ Story,
4
+ Canvas,
5
+ ArgsTable,
6
+ Preview,
7
+ Description,
8
+ } from "@storybook/addon-docs/blocks";
9
+ import { withDesign } from "storybook-addon-designs";
10
+
11
+ import { getCategory } from "../../utils/componentCategories";
12
+ import DSProvider from "../../theme/provider";
13
+ import RadioGroup, { onChangeDefault } from "./RadioGroup";
14
+ import { RadioGroupLayoutTypes } from "./RadioGroupLayoutTypes";
15
+ import Radio from "../Radio/Radio";
16
+
17
+ <Meta
18
+ title={getCategory("RadioGroup")}
19
+ component={RadioGroup}
20
+ decorators={[withDesign]}
21
+ parameters={{
22
+ design: {
23
+ type: "figma",
24
+ url:
25
+ "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A742",
26
+ },
27
+ jest: ["RadioGroup.test.tsx"],
28
+ }}
29
+ argTypes={{
30
+ children: { table: { disable: true } },
31
+ className: { table: { disable: true } },
32
+ onChange: { table: { disable: true } },
33
+ id: { table: { disable: true } },
34
+ }}
35
+ />
36
+
37
+ # RadioGroup
38
+
39
+ | Component Version | DS Version |
40
+ | ----------------- | ---------- |
41
+ | Added | `0.25.0` |
42
+ | Latest | `0.25.0` |
43
+
44
+ <Description of={RadioGroup} />
45
+
46
+ <Preview withToolbar>
47
+ <Story
48
+ name="RadioGroup"
49
+ args={{
50
+ defaultValue: "4",
51
+ invalidText: "error!",
52
+ helperText: "This is the helper text for the full group.",
53
+ isDisabled: false,
54
+ isInvalid: false,
55
+ isRequired: false,
56
+ labelText: "Standard Radio Group",
57
+ layout: RadioGroupLayoutTypes.Column,
58
+ name: "radio-story",
59
+ optReqFlag: true,
60
+ showLabel: true,
61
+ }}
62
+ >
63
+ {(args) => (
64
+ <RadioGroup {...args}>
65
+ <Radio value="2" labelText="Radio 2" />
66
+ <Radio value="3" labelText="Radio 3" />
67
+ <Radio value="4" labelText="Radio 4" />
68
+ <Radio value="5" labelText="Radio 5" />
69
+ </RadioGroup>
70
+ )}
71
+ </Story>
72
+ </Preview>
73
+
74
+ <ArgsTable story="RadioGroup" />
75
+
76
+ ## Layout Patterns
77
+
78
+ Use the `layout` prop to set the `Radio` buttons to display in a column or in
79
+ a row.
80
+
81
+ <Canvas>
82
+ <DSProvider>
83
+ <RadioGroup
84
+ labelText="Column (default)"
85
+ name="column-example"
86
+ optReqFlag={false}
87
+ >
88
+ <Radio value="2" labelText="Radio 2" />
89
+ <Radio value="3" labelText="Radio 3" />
90
+ <Radio value="4" labelText="Radio 4" />
91
+ <Radio value="5" labelText="Radio 5" />
92
+ </RadioGroup>
93
+ <br />
94
+ <RadioGroup
95
+ labelText="Row"
96
+ name="row-example"
97
+ layout={RadioGroupLayoutTypes.Row}
98
+ optReqFlag={false}
99
+ >
100
+ <Radio value="2" labelText="Radio 2" />
101
+ <Radio value="3" labelText="Radio 3" />
102
+ <Radio value="4" labelText="Radio 4" />
103
+ <Radio value="5" labelText="Radio 5" />
104
+ </RadioGroup>
105
+ </DSProvider>
106
+ </Canvas>
107
+
108
+ ## Errored
109
+
110
+ <Canvas>
111
+ <DSProvider>
112
+ <RadioGroup
113
+ labelText="Errored Radio Group"
114
+ name="errored-example"
115
+ optReqFlag={false}
116
+ invalidText="Error message for the full group."
117
+ isInvalid
118
+ >
119
+ <Radio value="2" labelText="Radio 2" />
120
+ <Radio value="3" labelText="Radio 3" />
121
+ <Radio value="4" labelText="Radio 4" />
122
+ <Radio value="5" labelText="Radio 5" />
123
+ </RadioGroup>
124
+ </DSProvider>
125
+ </Canvas>
126
+
127
+ ## Disabled
128
+
129
+ <Canvas>
130
+ <DSProvider>
131
+ <RadioGroup
132
+ labelText="Disabled Radio Group"
133
+ name="disabled-example"
134
+ optReqFlag={false}
135
+ helperText="The reason for being disabled."
136
+ isDisabled
137
+ >
138
+ <Radio value="2" labelText="Radio 2" />
139
+ <Radio value="3" labelText="Radio 3" />
140
+ <Radio value="4" labelText="Radio 4" />
141
+ <Radio value="5" labelText="Radio 5" />
142
+ </RadioGroup>
143
+ </DSProvider>
144
+ </Canvas>
145
+
146
+ ## Getting Radio Data Values
147
+
148
+ ### Controlled Component using `name` and `onChange` props
149
+
150
+ If your application uses controlled React components and the DS RadioGroup must
151
+ be controlled, you can extract the data through the `name` and `onChange` props.
152
+ This will be called every time a new `Radio` value is selected.
153
+
154
+ ```jsx
155
+ const onChange = (data) => {
156
+ // This will return the value selected as a string.
157
+ console.log(data);
158
+ };
159
+ // ...
160
+
161
+ // Example of the DS RadioGroup instance with the function above:
162
+ <RadioGroup
163
+ id="controlled-example"
164
+ labelText="Radio Group"
165
+ name="radioExample"
166
+ defaultValue="3"
167
+ onChange={onChange}
168
+ >
169
+ <Radio value="2" labelText="Radio 2" />
170
+ <Radio value="3" labelText="Radio 3" />
171
+ <Radio value="4" labelText="Radio 4" />
172
+ </RadioGroup>;
173
+ ```
174
+
175
+ ### Uncontrolled Component using `ref`s
176
+
177
+ If your application uses uncontrolled components, you can pass React `ref` props
178
+ to the DS RadioGroup component to get the selected value from the DOM.
179
+
180
+ The following example is using the `register` React `ref` from the
181
+ `react-hook-form` package.
182
+
183
+ ```jsx
184
+ import { useFormContext, Controller } from "react-hook-form";
185
+ // ...
186
+ const { register, handleSubmit, control } = useFormContext();
187
+ // ...
188
+ const submitForm = (formData) => {
189
+ // This will return an object with all the DOM element values that were
190
+ // registered with a `name` attribute.
191
+ // {
192
+ // radioExample: "3"
193
+ // }
194
+ console.log(formData);
195
+ // ...
196
+ };
197
+
198
+ <form
199
+ onSubmit={handleSubmit(submitForm)}
200
+ method="post"
201
+ action="/some/api/endpoint"
202
+ >
203
+ <Controller
204
+ as={
205
+ <RadioGroup
206
+ id="uncontrolled-example"
207
+ labelText="Radio Group"
208
+ name="radioExample"
209
+ defaultValue="3"
210
+ ref={register()}
211
+ >
212
+ <Radio value="2" labelText="Radio 2" />
213
+ <Radio value="3" labelText="Radio 3" />
214
+ <Radio value="4" labelText="Radio 4" />
215
+ </RadioGroup>
216
+ }
217
+ name="radioExample"
218
+ control={control}
219
+ />
220
+ </form>;
221
+ ```
222
+
223
+ The above is specific to `react-hook-form` but a similar pattern can be used
224
+ with normal React `ref` values.
225
+
226
+ ```jsx
227
+ const radioGroupRef = React.createRef<HTMLInputElement>();
228
+ // ...
229
+ <RadioGroup
230
+ id="uncontrolled-example"
231
+ labelText="Radio Group"
232
+ name="radioExample"
233
+ defaultValue="3"
234
+ ref={radioGroupRef}
235
+ >
236
+ <Radio value="2" labelText="Radio 2" />
237
+ <Radio value="3" labelText="Radio 3" />
238
+ <Radio value="4" labelText="Radio 4" />
239
+ </RadioGroup>
240
+
241
+ // ...
242
+ // Get the value through:
243
+ const onSubmit = () => {
244
+ // ...
245
+ const radioGroupValue = radioGroupRef.current.value;
246
+ };
247
+ ```