@nypl/design-system-react-components 0.25.0 → 0.25.4

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 (392) hide show
  1. package/CHANGELOG.md +142 -1
  2. package/README.md +98 -50
  3. package/dist/components/Accordion/Accordion.d.ts +14 -14
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +15 -14
  5. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  6. package/dist/components/Button/Button.d.ts +13 -8
  7. package/dist/components/Button/ButtonTypes.d.ts +3 -1
  8. package/dist/components/Card/Card.d.ts +36 -52
  9. package/dist/components/Card/CardTypes.d.ts +2 -17
  10. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  11. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +45 -0
  12. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  13. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  14. package/dist/components/DatePicker/DatePicker.d.ts +37 -35
  15. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  16. package/dist/components/Form/Form.d.ts +13 -8
  17. package/dist/components/Form/FormTypes.d.ts +2 -8
  18. package/dist/components/Grid/GridTypes.d.ts +9 -0
  19. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  20. package/dist/components/Heading/Heading.d.ts +4 -4
  21. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  22. package/dist/components/Hero/Hero.d.ts +19 -14
  23. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  24. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  25. package/dist/components/Icons/Icon.d.ts +19 -14
  26. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  27. package/dist/components/Icons/IconTypes.d.ts +89 -64
  28. package/dist/components/Image/Image.d.ts +19 -9
  29. package/dist/components/Image/ImageTypes.d.ts +20 -0
  30. package/dist/components/Label/Label.d.ts +5 -17
  31. package/dist/components/Link/Link.d.ts +12 -12
  32. package/dist/components/List/List.d.ts +19 -14
  33. package/dist/components/Notification/Notification.d.ts +37 -16
  34. package/dist/components/Pagination/Pagination.d.ts +16 -13
  35. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  36. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  37. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  38. package/dist/components/Radio/Radio.d.ts +2 -0
  39. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  40. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  41. package/dist/components/Select/Select.d.ts +34 -35
  42. package/dist/components/Select/SelectTypes.d.ts +4 -0
  43. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  44. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  45. package/dist/components/Slider/Slider.d.ts +57 -0
  46. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  47. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  48. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  49. package/dist/components/Tabs/Tabs.d.ts +1 -1
  50. package/dist/components/Template/Template.d.ts +91 -0
  51. package/dist/components/Text/Text.d.ts +16 -0
  52. package/dist/components/Text/TextTypes.d.ts +6 -0
  53. package/dist/components/TextInput/TextInput.d.ts +44 -31
  54. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  55. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  56. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  57. package/dist/design-system-react-components.cjs.development.js +6473 -2630
  58. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  59. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  60. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  61. package/dist/design-system-react-components.esm.js +6463 -2631
  62. package/dist/design-system-react-components.esm.js.map +1 -1
  63. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  64. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  65. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  66. package/dist/hooks/useWindowSize.d.ts +10 -0
  67. package/dist/index.d.ts +19 -7
  68. package/dist/resources.scss +180 -170
  69. package/dist/styles.css +1 -1
  70. package/dist/theme/components/accordion.d.ts +25 -0
  71. package/dist/theme/components/breadcrumb.d.ts +90 -0
  72. package/dist/theme/components/button.d.ts +39 -15
  73. package/dist/theme/components/card.d.ts +168 -0
  74. package/dist/theme/components/checkbox.d.ts +12 -8
  75. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  76. package/dist/theme/components/componentWrapper.d.ts +11 -0
  77. package/dist/theme/components/datePicker.d.ts +16 -0
  78. package/dist/theme/components/fieldset.d.ts +27 -0
  79. package/dist/theme/components/global.d.ts +65 -0
  80. package/dist/theme/components/globalMixins.d.ts +23 -0
  81. package/dist/theme/components/heading.d.ts +55 -20
  82. package/dist/theme/components/helperErrorText.d.ts +10 -0
  83. package/dist/theme/components/hero.d.ts +493 -0
  84. package/dist/theme/components/horizontalRule.d.ts +14 -0
  85. package/dist/theme/components/icon.d.ts +13 -0
  86. package/dist/theme/components/image.d.ts +31 -0
  87. package/dist/theme/components/label.d.ts +18 -0
  88. package/dist/theme/components/link.d.ts +49 -0
  89. package/dist/theme/components/list.d.ts +89 -0
  90. package/dist/theme/components/notification.d.ts +75 -0
  91. package/dist/theme/components/pagination.d.ts +19 -0
  92. package/dist/theme/components/progressIndicator.d.ts +50 -0
  93. package/dist/theme/components/radio.d.ts +8 -7
  94. package/dist/theme/components/radioGroup.d.ts +12 -0
  95. package/dist/theme/components/searchBar.d.ts +20 -0
  96. package/dist/theme/components/select.d.ts +67 -0
  97. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  98. package/dist/theme/components/slider.d.ts +51 -0
  99. package/dist/theme/components/statusBadge.d.ts +25 -0
  100. package/dist/theme/components/tabs.d.ts +63 -12
  101. package/dist/theme/components/template.d.ts +105 -0
  102. package/dist/theme/components/text.d.ts +20 -0
  103. package/dist/theme/components/textInput.d.ts +112 -0
  104. package/dist/theme/components/videoPlayer.d.ts +40 -0
  105. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  106. package/dist/theme/foundations/global.d.ts +8 -0
  107. package/dist/theme/foundations/radii.d.ts +5 -0
  108. package/dist/theme/foundations/shadows.d.ts +4 -0
  109. package/dist/theme/foundations/spacing.d.ts +16 -16
  110. package/dist/utils/utils.d.ts +6 -0
  111. package/package.json +72 -82
  112. package/src/__tests__/setup.ts +2 -2
  113. package/src/components/Accordion/Accordion.stories.mdx +223 -34
  114. package/src/components/Accordion/Accordion.test.tsx +135 -19
  115. package/src/components/Accordion/Accordion.tsx +81 -56
  116. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -4
  117. package/src/components/Autosuggest/Autosuggest.stories.tsx +3 -2
  118. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  119. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +48 -50
  120. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +54 -25
  121. package/src/components/Breadcrumbs/Breadcrumbs.tsx +75 -73
  122. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  123. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +298 -0
  124. package/src/components/Button/Button.stories.mdx +45 -36
  125. package/src/components/Button/Button.test.tsx +37 -11
  126. package/src/components/Button/Button.tsx +22 -34
  127. package/src/components/Button/ButtonTypes.tsx +2 -0
  128. package/src/components/Button/__snapshots__/Button.test.tsx.snap +50 -8
  129. package/src/components/Card/Card.stories.mdx +314 -273
  130. package/src/components/Card/Card.test.tsx +157 -91
  131. package/src/components/Card/Card.tsx +195 -145
  132. package/src/components/Card/CardTypes.tsx +2 -19
  133. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  134. package/src/components/CardEdition/CardEdition.stories.tsx +26 -53
  135. package/src/components/CardEdition/CardEdition.test.tsx +23 -31
  136. package/src/components/CardEdition/_CardEdition.scss +22 -23
  137. package/src/components/Chakra/Box.stories.mdx +15 -16
  138. package/src/components/Chakra/Center.stories.mdx +56 -24
  139. package/src/components/Chakra/Grid.stories.mdx +92 -0
  140. package/src/components/Chakra/Stack.stories.mdx +38 -21
  141. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  142. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  143. package/src/components/Checkbox/Checkbox.tsx +44 -41
  144. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +92 -7
  145. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +329 -0
  146. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +372 -0
  147. package/src/components/CheckboxGroup/CheckboxGroup.tsx +152 -0
  148. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  149. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1326 -0
  150. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  151. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  152. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  153. package/src/components/DatePicker/DatePicker.tsx +165 -134
  154. package/src/components/DatePicker/_DatePicker.scss +33 -66
  155. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  156. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  157. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  158. package/src/components/Fieldset/Fieldset.tsx +52 -0
  159. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  160. package/src/components/Form/Form.stories.mdx +70 -27
  161. package/src/components/Form/Form.test.tsx +58 -45
  162. package/src/components/Form/Form.tsx +50 -21
  163. package/src/components/Form/FormTypes.tsx +3 -8
  164. package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
  165. package/src/components/Grid/GridTypes.tsx +9 -0
  166. package/src/components/Grid/SimpleGrid.stories.mdx +268 -0
  167. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  168. package/src/components/Grid/SimpleGrid.tsx +37 -0
  169. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  170. package/src/components/Heading/Heading.stories.mdx +3 -3
  171. package/src/components/Heading/Heading.tsx +12 -6
  172. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  173. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  174. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  175. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  176. package/src/components/Hero/Hero.stories.mdx +198 -121
  177. package/src/components/Hero/Hero.test.tsx +537 -107
  178. package/src/components/Hero/Hero.tsx +79 -92
  179. package/src/components/Hero/HeroTypes.tsx +18 -5
  180. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  181. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  182. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  183. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  184. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  185. package/src/components/Icons/Icon.stories.mdx +94 -77
  186. package/src/components/Icons/Icon.test.tsx +48 -22
  187. package/src/components/Icons/Icon.tsx +78 -61
  188. package/src/components/Icons/IconSvgs.tsx +22 -0
  189. package/src/components/Icons/IconTypes.tsx +91 -64
  190. package/src/components/Image/Image.stories.mdx +220 -0
  191. package/src/components/Image/Image.test.tsx +131 -29
  192. package/src/components/Image/Image.tsx +84 -56
  193. package/src/components/Image/ImageTypes.ts +22 -0
  194. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  195. package/src/components/Input/Input.stories.tsx +23 -67
  196. package/src/components/Input/Input.test.tsx +4 -4
  197. package/src/components/Input/_Input.scss +23 -14
  198. package/src/components/Label/Label.stories.mdx +28 -7
  199. package/src/components/Label/Label.test.tsx +43 -12
  200. package/src/components/Label/Label.tsx +21 -34
  201. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  202. package/src/components/Link/Link.stories.mdx +41 -41
  203. package/src/components/Link/Link.test.tsx +33 -44
  204. package/src/components/Link/Link.tsx +117 -100
  205. package/src/components/List/List.stories.mdx +124 -51
  206. package/src/components/List/List.test.tsx +142 -63
  207. package/src/components/List/List.tsx +89 -93
  208. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  209. package/src/components/Modal/Modal.stories.mdx +3 -3
  210. package/src/components/Modal/_Modal.scss +2 -2
  211. package/src/components/Notification/Notification.stories.mdx +119 -111
  212. package/src/components/Notification/Notification.test.tsx +102 -126
  213. package/src/components/Notification/Notification.tsx +157 -161
  214. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  215. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  216. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  217. package/src/components/Pagination/Pagination.test.tsx +276 -140
  218. package/src/components/Pagination/Pagination.tsx +174 -154
  219. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  220. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  221. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  222. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  223. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  224. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  225. package/src/components/Radio/Radio.test.tsx +20 -4
  226. package/src/components/Radio/Radio.tsx +6 -3
  227. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  228. package/src/components/RadioGroup/RadioGroup.stories.mdx +4 -5
  229. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  230. package/src/components/RadioGroup/RadioGroup.tsx +21 -29
  231. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  232. package/src/components/SearchBar/SearchBar.Test.tsx +170 -16
  233. package/src/components/SearchBar/SearchBar.stories.mdx +294 -219
  234. package/src/components/SearchBar/SearchBar.tsx +161 -46
  235. package/src/components/Select/Select.stories.mdx +188 -170
  236. package/src/components/Select/Select.test.tsx +132 -375
  237. package/src/components/Select/Select.tsx +121 -165
  238. package/src/components/Select/SelectTypes.tsx +5 -0
  239. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +33 -76
  240. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  241. package/src/components/SkeletonLoader/SkeletonLoader.tsx +75 -70
  242. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  243. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  244. package/src/components/Slider/Slider.stories.mdx +529 -0
  245. package/src/components/Slider/Slider.test.tsx +653 -0
  246. package/src/components/Slider/Slider.tsx +303 -0
  247. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  248. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  249. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  250. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  251. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  252. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  253. package/src/components/StyleGuide/Bidirectionality.stories.mdx +17 -17
  254. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  255. package/src/components/StyleGuide/Buttons.stories.mdx +102 -86
  256. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  257. package/src/components/StyleGuide/Colors.stories.mdx +196 -0
  258. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  259. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  260. package/src/components/StyleGuide/Iconography.stories.mdx +119 -127
  261. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  262. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  263. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  264. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  265. package/src/components/Tabs/Tabs.tsx +88 -67
  266. package/src/components/Template/Template.stories.mdx +572 -0
  267. package/src/components/Template/Template.test.tsx +124 -0
  268. package/src/components/Template/Template.tsx +226 -0
  269. package/src/components/Text/Text.stories.mdx +70 -0
  270. package/src/components/Text/Text.test.tsx +63 -0
  271. package/src/components/Text/Text.tsx +55 -0
  272. package/src/components/Text/TextTypes.tsx +6 -0
  273. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  274. package/src/components/TextInput/TextInput.stories.mdx +89 -90
  275. package/src/components/TextInput/TextInput.test.tsx +84 -85
  276. package/src/components/TextInput/TextInput.tsx +121 -95
  277. package/src/components/TextInput/TextInputTypes.tsx +8 -0
  278. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  279. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  280. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  281. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  282. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  283. package/src/docs/Chakra.stories.mdx +246 -65
  284. package/src/docs/Intro.stories.mdx +18 -13
  285. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  286. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  287. package/src/hooks/useCarouselStyles.ts +34 -0
  288. package/src/hooks/useNYPLTheme.ts +67 -0
  289. package/src/hooks/useWindowSize.ts +40 -0
  290. package/src/index.ts +39 -16
  291. package/src/resources.scss +5 -5
  292. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  293. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  294. package/src/styles/base/_03-base.scss +25 -0
  295. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  296. package/src/styles/base/_place-holder.scss +14 -3
  297. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  298. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  299. package/src/styles/space/_space-stack.scss +116 -0
  300. package/src/styles.scss +13 -62
  301. package/src/theme/components/accordion.ts +30 -0
  302. package/src/theme/components/breadcrumb.ts +77 -0
  303. package/src/theme/components/button.ts +91 -71
  304. package/src/theme/components/card.ts +174 -0
  305. package/src/theme/components/checkbox.ts +22 -29
  306. package/src/theme/components/checkboxGroup.ts +8 -0
  307. package/src/theme/components/componentWrapper.ts +10 -0
  308. package/src/theme/components/datePicker.ts +17 -0
  309. package/src/theme/components/fieldset.ts +18 -0
  310. package/src/theme/components/global.ts +82 -0
  311. package/src/theme/components/globalMixins.ts +24 -0
  312. package/src/theme/components/heading.ts +25 -13
  313. package/src/theme/components/helperErrorText.ts +9 -0
  314. package/src/theme/components/hero.ts +240 -0
  315. package/src/theme/components/horizontalRule.ts +13 -0
  316. package/src/theme/components/icon.ts +79 -0
  317. package/src/theme/components/image.ts +116 -0
  318. package/src/theme/components/label.ts +10 -0
  319. package/src/theme/components/link.ts +51 -0
  320. package/src/theme/components/list.ts +73 -0
  321. package/src/theme/components/notification.ts +93 -0
  322. package/src/theme/components/pagination.ts +20 -0
  323. package/src/theme/components/progressIndicator.ts +62 -0
  324. package/src/theme/components/radio.ts +22 -33
  325. package/src/theme/components/radioGroup.ts +8 -0
  326. package/src/theme/components/searchBar.ts +21 -0
  327. package/src/theme/components/select.ts +53 -0
  328. package/src/theme/components/skeletonLoader.ts +107 -0
  329. package/src/theme/components/slider.ts +79 -0
  330. package/src/theme/components/statusBadge.ts +26 -0
  331. package/src/theme/components/tabs.ts +102 -69
  332. package/src/theme/components/template.ts +114 -0
  333. package/src/theme/components/text.ts +31 -0
  334. package/src/theme/components/textInput.ts +62 -0
  335. package/src/theme/components/videoPlayer.ts +49 -0
  336. package/src/theme/foundations/breakpoints.ts +8 -8
  337. package/src/theme/foundations/colors.ts +29 -13
  338. package/src/theme/foundations/global.ts +8 -0
  339. package/src/theme/foundations/radii.ts +6 -0
  340. package/src/theme/foundations/shadows.ts +5 -0
  341. package/src/theme/foundations/spacing.ts +24 -24
  342. package/src/theme/index.ts +74 -13
  343. package/src/utils/componentCategories.ts +12 -5
  344. package/src/utils/utils.ts +13 -0
  345. package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
  346. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  347. package/dist/components/Image/Image.stories.d.ts +0 -18
  348. package/dist/components/List/List.stories.d.ts +0 -7
  349. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  350. package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
  351. package/dist/components/Template/Template.stories.d.ts +0 -30
  352. package/dist/theme/components/customRadioGroup.d.ts +0 -17
  353. package/src/components/Accordion/Accordion.stories.tsx +0 -66
  354. package/src/components/Accordion/_Accordion.scss +0 -81
  355. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  356. package/src/components/Button/_Button.scss +0 -56
  357. package/src/components/Card/_Card.scss +0 -308
  358. package/src/components/Form/_Form.scss +0 -67
  359. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  360. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  361. package/src/components/Hero/_Hero.scss +0 -256
  362. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  363. package/src/components/Icons/_Icons.scss +0 -116
  364. package/src/components/Image/Image.stories.tsx +0 -54
  365. package/src/components/Image/_Image.scss +0 -38
  366. package/src/components/Label/_Label.scss +0 -22
  367. package/src/components/Link/_Link.scss +0 -73
  368. package/src/components/List/List.stories.tsx +0 -139
  369. package/src/components/List/_List.scss +0 -76
  370. package/src/components/Notification/_Notification.scss +0 -110
  371. package/src/components/Pagination/_Pagination.scss +0 -40
  372. package/src/components/SearchBar/_SearchBar.scss +0 -16
  373. package/src/components/Select/_Select.scss +0 -82
  374. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  375. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
  376. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  377. package/src/components/StyleGuide/Colors.stories.tsx +0 -289
  378. package/src/components/Template/Template.stories.tsx +0 -86
  379. package/src/components/Template/_Template.scss +0 -63
  380. package/src/components/TextInput/_TextInput.scss +0 -59
  381. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  382. package/src/styles/01-colors/_colors-brand.scss +0 -56
  383. package/src/styles/01-colors/_colors-utility.scss +0 -65
  384. package/src/styles/02-typography/_type-scale.css +0 -11
  385. package/src/styles/02-typography/_type-weight.css +0 -7
  386. package/src/styles/02-typography/_typefaces.css +0 -4
  387. package/src/styles/03-space/_space-stack.scss +0 -116
  388. package/src/styles/03-space/_space.css +0 -30
  389. package/src/styles/base/_04-base.scss +0 -19
  390. package/src/styles/base/_card-grid.scss +0 -78
  391. package/src/styles/base/_typography.scss +0 -11
  392. package/src/theme/components/customRadioGroup.ts +0 -18
@@ -3,18 +3,21 @@ 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
- import Link from "./Link";
11
9
  import {
12
10
  BrowserRouter as Router,
13
11
  Link as ReactRouterLink,
14
12
  } from "react-router-dom";
13
+ import { VStack } from "@chakra-ui/react";
14
+
15
+ import Link from "./Link";
15
16
  import { LinkTypes } from "./LinkTypes";
16
17
  import Icon from "../Icons/Icon";
18
+ import { IconAlign, IconSizes } from "../Icons/IconTypes";
17
19
  import { getCategory } from "../../utils/componentCategories";
20
+ import DSProvider from "../../theme/provider";
18
21
 
19
22
  <Meta
20
23
  title={getCategory("Link")}
@@ -24,18 +27,18 @@ import { getCategory } from "../../utils/componentCategories";
24
27
  design: {
25
28
  type: "figma",
26
29
  url:
27
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=16115%3A407",
30
+ "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36854%3A24387",
28
31
  },
29
32
  jest: ["Link.test.tsx"],
30
33
  }}
31
34
  argTypes={{
32
- blockName: { table: { disable: true } },
33
- modifiers: { table: { disable: true } },
35
+ attributes: { table: { disable: true } },
34
36
  children: { table: { disable: true } },
35
37
  type: {
36
38
  control: {
37
39
  type: "select",
38
40
  },
41
+ options: LinkTypes,
39
42
  },
40
43
  }}
41
44
  />
@@ -45,11 +48,11 @@ import { getCategory } from "../../utils/componentCategories";
45
48
  | Component Version | DS Version |
46
49
  | ----------------- | ---------- |
47
50
  | Added | `0.0.4` |
48
- | Latest | `0.20.2` |
51
+ | Latest | `0.25.1` |
49
52
 
50
53
  <Description of={Link} />
51
54
 
52
- <Preview withToolbar>
55
+ <Canvas withToolbar>
53
56
  <Story
54
57
  name="Basic"
55
58
  args={{
@@ -65,7 +68,7 @@ import { getCategory } from "../../utils/componentCategories";
65
68
  >
66
69
  {(args) => <Link {...args}>Link</Link>}
67
70
  </Story>
68
- </Preview>
71
+ </Canvas>
69
72
 
70
73
  <ArgsTable story="Basic" />
71
74
 
@@ -75,42 +78,35 @@ To render an `Icon` as part of the link, make sure that the `Link` component
75
78
  wraps the `Icon`. Use `type={LinkTypes.Action}` to apply appropriate styling to
76
79
  links with icons. Icons can be rendered to the left or right of the link text.
77
80
 
78
- <Preview>
81
+ <Canvas>
79
82
  <Story name="With Icons">
80
- <>
83
+ <VStack spacing="xs" align="flex-start">
81
84
  <Link type={LinkTypes.Action} href="#passed-in-link">
82
- <Icon
83
- name={"headset"}
84
- modifiers={["left", "small"]}
85
- decorative={true}
86
- />
85
+ <Icon name="headset" align={IconAlign.Left} size={IconSizes.Small} />
87
86
  Headset Link
88
87
  </Link>
89
- <br />
90
88
  <Link type={LinkTypes.Action} href="#passed-in-link">
91
- <Icon name={"clock"} modifiers={["left", "small"]} decorative={true} />
89
+ <Icon name="clock" align={IconAlign.Left} size={IconSizes.Small} />
92
90
  Clock Link
93
91
  </Link>
94
- <br />
95
92
  <Link type={LinkTypes.Action} href="#passed-in-link">
96
- <Icon name={"check"} modifiers={["left", "small"]} decorative={true} />
93
+ <Icon name="check" align={IconAlign.Left} size={IconSizes.Small} />
97
94
  Check Link
98
95
  </Link>
99
- <br />
100
96
  <Link type={LinkTypes.Action} href="#passed-in-link-right">
101
97
  Check Link Right
102
- <Icon name={"check"} modifiers={["right", "small"]} decorative={true} />
98
+ <Icon name="check" align={IconAlign.Right} size={IconSizes.Small} />
103
99
  </Link>
104
- </>
100
+ </VStack>
105
101
  </Story>
106
- </Preview>
102
+ </Canvas>
107
103
 
108
104
  ## Anchor Element Rendering
109
105
 
110
106
  `Link` can wrap an existing `<a>` tag or it can use the `href` prop to generate
111
107
  an `<a>` tag.
112
108
 
113
- <Preview>
109
+ <Canvas>
114
110
  <Story name="Anchor Element Rendering">
115
111
  <>
116
112
  This is a{" "}
@@ -124,11 +120,11 @@ an `<a>` tag.
124
120
  where the Link component uses the `href` prop and has a string-only child.
125
121
  </>
126
122
  </Story>
127
- </Preview>
123
+ </Canvas>
128
124
 
129
125
  ## Link with Routers
130
126
 
131
- <Preview>
127
+ <Canvas>
132
128
  <Story name="Link with Routers">
133
129
  <div>With React Router</div>
134
130
  <Router>
@@ -143,7 +139,7 @@ an `<a>` tag.
143
139
  <Link type={LinkTypes.Action}>Next Page</Link>
144
140
  </NextJsLink>
145
141
  </Story>
146
- </Preview>
142
+ </Canvas>
147
143
 
148
144
  ### React Router
149
145
 
@@ -151,7 +147,7 @@ The Design System's `Link` component should wrap around `react-router`'s own
151
147
  `Link` component. To avoid name conflicts, rename either the Design System's
152
148
  or `react-router`'s `Link` component.
153
149
 
154
- ```js
150
+ ```jsx
155
151
  import {
156
152
  BrowserRouter as Router,
157
153
  Link as ReactRouterLink,
@@ -184,13 +180,15 @@ import DS from "@nypl/design-system-react-components";
184
180
  </DS.Link>;
185
181
  ```
186
182
 
187
- <Preview>
188
- <Router>
189
- <Link type={LinkTypes.Action}>
190
- <ReactRouterLink to="#">Next Page</ReactRouterLink>
191
- </Link>
192
- </Router>
193
- </Preview>
183
+ <Canvas>
184
+ <DSProvider>
185
+ <Router>
186
+ <Link type={LinkTypes.Action}>
187
+ <ReactRouterLink to="#">Next Page</ReactRouterLink>
188
+ </Link>
189
+ </Router>
190
+ </DSProvider>
191
+ </Canvas>
194
192
 
195
193
  ### NextJS
196
194
 
@@ -200,7 +198,7 @@ These props, along with an implicit `ref` from NextJS and the Design System's
200
198
  `Link` component `forwardRef` implementation, handle correctly routing between
201
199
  pages in a NextJS app.
202
200
 
203
- ```js
201
+ ```jsx
204
202
  import { Link, LinkTypes } from "@nypl/design-system-react-components";
205
203
 
206
204
  /* This is just an example wrapper that works similarly to NextJS' `Link`
@@ -232,8 +230,10 @@ export const NextJsLink = (props) => (
232
230
  </div>
233
231
  );
234
232
 
235
- <Preview>
236
- <NextJsLink href="#" passHref>
237
- <Link type={LinkTypes.Action}>Next Page</Link>
238
- </NextJsLink>
239
- </Preview>
233
+ <Canvas>
234
+ <DSProvider>
235
+ <NextJsLink href="#" passHref>
236
+ <Link type={LinkTypes.Action}>Next Page</Link>
237
+ </NextJsLink>
238
+ </DSProvider>
239
+ </Canvas>
@@ -9,10 +9,10 @@ import {
9
9
  Link as ReactRouterLink,
10
10
  } from "react-router-dom";
11
11
  import Icon from "../Icons/Icon";
12
- import { IconRotationTypes, IconNames } from "../Icons/IconTypes";
12
+ import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
13
13
 
14
14
  describe("Link Accessibility", () => {
15
- it("passes axe accessibility test", async () => {
15
+ it("passes axe accessibility test for children component", async () => {
16
16
  const { container } = render(
17
17
  <Link>
18
18
  <a href="#test">Test</a>
@@ -20,26 +20,28 @@ describe("Link Accessibility", () => {
20
20
  );
21
21
  expect(await axe(container)).toHaveNoViolations();
22
22
  });
23
+
24
+ it("passes axe accessibility test for href prop", async () => {
25
+ const { container } = render(<Link href="#test">Test</Link>);
26
+ expect(await axe(container)).toHaveNoViolations();
27
+ });
23
28
  });
24
29
 
25
30
  describe("Link", () => {
26
- it("Can pass in icon, text as child and url as props", () => {
31
+ it("Can pass in an icon and text as children and url as prop", () => {
27
32
  const utils = render(
28
33
  <Link href="#passed-in-link" type={LinkTypes.Action}>
29
34
  <Icon
30
- name={IconNames.download}
31
- blockName="more-link"
32
- modifiers={["left"]}
33
- decorative={true}
34
- iconRotation={IconRotationTypes.rotate0}
35
+ className="more-link"
36
+ name={IconNames.Download}
37
+ align={IconAlign.Left}
38
+ iconRotation={IconRotationTypes.Rotate0}
35
39
  />
36
40
  Download
37
41
  </Link>
38
42
  );
39
43
  expect(screen.getByRole("link")).toBeInTheDocument();
40
- expect(
41
- utils.container.querySelector(".more-link__icon")
42
- ).toBeInTheDocument();
44
+ expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
43
45
  });
44
46
 
45
47
  it("Can pass a link with <a> tag", () => {
@@ -56,20 +58,17 @@ describe("Link", () => {
56
58
  <Link type={LinkTypes.Action}>
57
59
  <a href="#test2">
58
60
  <Icon
59
- name={IconNames.download}
60
- blockName="more-link"
61
- modifiers={["left"]}
62
- decorative={true}
63
- iconRotation={IconRotationTypes.rotate0}
61
+ className="more-link"
62
+ name={IconNames.Download}
63
+ align={IconAlign.Left}
64
+ iconRotation={IconRotationTypes.Rotate0}
64
65
  />
65
66
  Test
66
67
  </a>
67
68
  </Link>
68
69
  );
69
70
  expect(screen.getByRole("link")).toBeInTheDocument();
70
- expect(
71
- utils.container.querySelector(".more-link__icon")
72
- ).toBeInTheDocument();
71
+ expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
73
72
  });
74
73
 
75
74
  it("Generated back link has icon", () => {
@@ -78,13 +77,10 @@ describe("Link", () => {
78
77
  content
79
78
  </Link>
80
79
  );
80
+ expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
81
81
  expect(
82
- utils.container.querySelector(".more-link__icon")
83
- ).toBeInTheDocument();
84
- expect(utils.container.querySelector(".more-link__icon")).toHaveAttribute(
85
- "class",
86
- "more-link__icon more-link__icon--left more-link__icon--rotate-90 "
87
- );
82
+ utils.container.querySelector(".more-link").getAttribute("class")
83
+ ).toContain("chakra-icon more-link");
88
84
  });
89
85
 
90
86
  it("Generated forwards link has icon", () => {
@@ -93,13 +89,10 @@ describe("Link", () => {
93
89
  content
94
90
  </Link>
95
91
  );
92
+ expect(utils.container.querySelector(".more-link")).toBeInTheDocument();
96
93
  expect(
97
- utils.container.querySelector(".more-link__icon")
98
- ).toBeInTheDocument();
99
- expect(utils.container.querySelector(".more-link__icon")).toHaveAttribute(
100
- "class",
101
- "more-link__icon more-link__icon--right more-link__icon--rotate-270 "
102
- );
94
+ utils.container.querySelector(".more-link").getAttribute("class")
95
+ ).toContain("chakra-icon more-link");
103
96
  });
104
97
 
105
98
  it("Can pass in text as child and url as props", () => {
@@ -113,12 +106,10 @@ describe("Link", () => {
113
106
  <Link type={LinkTypes.Action}>
114
107
  <ReactRouterLink to="#">
115
108
  <Icon
116
- name={IconNames.download}
117
- blockName="more-link"
118
- modifiers={["left"]}
119
- decorative={true}
120
- iconRotation={IconRotationTypes.rotate0}
121
- ></Icon>
109
+ name={IconNames.Download}
110
+ align={IconAlign.Left}
111
+ iconRotation={IconRotationTypes.Rotate0}
112
+ />
122
113
  Download
123
114
  </ReactRouterLink>
124
115
  </Link>
@@ -138,16 +129,14 @@ describe("Link", () => {
138
129
  render(
139
130
  <Link>
140
131
  <Icon
141
- name={IconNames.download}
142
- blockName="more-link"
143
- modifiers={["left"]}
144
- decorative={true}
145
- iconRotation={IconRotationTypes.rotate0}
146
- ></Icon>
132
+ name={IconNames.Download}
133
+ align={IconAlign.Left}
134
+ iconRotation={IconRotationTypes.Rotate0}
135
+ />
147
136
  <a href="#test">Test</a>
148
137
  </Link>
149
138
  )
150
- ).toThrowError("Please pass only one child into Link");
139
+ ).toThrowError("Please pass only one child into `Link`.");
151
140
  });
152
141
 
153
142
  // TODO:
@@ -1,128 +1,145 @@
1
1
  import * as React from "react";
2
- import bem from "../../utils/bem";
2
+ import { Box, useStyleConfig } from "@chakra-ui/react";
3
+
3
4
  import { LinkTypes } from "./LinkTypes";
4
- import Icon, { IconProps } from "../Icons/Icon";
5
- import { IconRotationTypes, IconNames } from "../Icons/IconTypes";
5
+ import Icon from "../Icons/Icon";
6
+ import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
7
+ import generateUUID from "../../helpers/generateUUID";
6
8
 
7
9
  export interface LinkProps {
10
+ /** Optionally pass in additional Chakra-based styles. */
11
+ additionalStyles?: { [key: string]: any };
8
12
  /** Additional attributes, such as `rel=nofollow`, to pass to the `<a>` tag. */
9
13
  attributes?: { [key: string]: any };
10
- /** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
11
- blockName?: string;
12
- /** className that appears in addition to "link" */
14
+ /** Any child node passed to the component. */
15
+ children: React.ReactNode;
16
+ /** Additional class name to render in the `Link` component. */
13
17
  className?: string;
14
- /** Href attribute */
18
+ /** The `href` attribute for the anchor element. */
15
19
  href?: string;
16
- /** ID */
20
+ /** ID used for accessibility purposes. */
17
21
  id?: string;
18
- /** Controls the link visualsaction, button, or default. */
22
+ /** Controls the link visuals: action, button, backwards, forwards, or default. */
19
23
  type?: LinkTypes;
20
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
21
- modifiers?: string[];
22
- /** Any child node passed to the component. */
23
- children: React.ReactNode;
24
24
  }
25
25
 
26
26
  /**
27
- * A component that uses an `href` prop or a child anchor element, to create an
28
- * anchor element with added styling and conventions.
27
+ * Renders the `Link` children components with a direction arrow icon based
28
+ * on the `Backwards` or `Forwards` `LinkTypes` type.
29
29
  */
30
- const Link = React.forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => {
31
- const {
32
- attributes,
33
- blockName,
34
- className,
35
- href,
36
- id,
37
- type = LinkTypes.Default,
38
- modifiers = [],
39
- children,
40
- } = props;
41
-
42
- // Merge the necessary props alongside any extra props for the
43
- // anchor element.
44
- const linkProps = {
45
- id,
46
- href,
47
- ...attributes,
48
- };
49
- let baseClass = "link";
50
-
51
- let childProps = {};
30
+ function getWithDirectionIcon(children, type: LinkTypes) {
31
+ let iconRotation;
32
+ let iconAlign;
33
+ let icon = null;
52
34
 
53
- if (typeof children === "string" && !href) {
54
- throw new Error("Link needs prop 'href'");
55
- }
56
-
57
- if (
58
- type === LinkTypes.Action ||
59
- type === LinkTypes.Forwards ||
60
- type === LinkTypes.Backwards
61
- ) {
62
- baseClass = "more-link";
63
- } else if (type === LinkTypes.Button) {
64
- baseClass = "button";
65
- }
66
-
67
- let iconRotation, iconPosition, iconLeft, iconRight;
68
35
  // An icon needs a position in order for it to be created and
69
36
  // rendered in the link.
70
37
  if (type === LinkTypes.Backwards) {
71
- iconRotation = IconRotationTypes.rotate90;
72
- iconPosition = "left";
38
+ iconRotation = IconRotationTypes.Rotate90;
39
+ iconAlign = IconAlign.Left;
73
40
  } else if (type === LinkTypes.Forwards) {
74
- iconRotation = IconRotationTypes.rotate270;
75
- iconPosition = "right";
41
+ iconRotation = IconRotationTypes.Rotate270;
42
+ iconAlign = IconAlign.Right;
76
43
  }
77
44
 
78
- const navigationIconProps: IconProps = {
79
- name: IconNames.arrow,
80
- modifiers: [iconPosition, iconRotation, ...modifiers],
81
- blockName: "more-link",
82
- decorative: true,
83
- };
45
+ icon = (
46
+ <Icon
47
+ name={IconNames.Arrow}
48
+ align={iconAlign}
49
+ iconRotation={iconRotation}
50
+ className="more-link"
51
+ />
52
+ );
84
53
 
85
- if (type === LinkTypes.Backwards) {
86
- iconLeft = <Icon {...navigationIconProps} />;
87
- } else if (type === LinkTypes.Forwards) {
88
- iconRight = <Icon {...navigationIconProps} />;
89
- }
90
- const linkClassName = bem(baseClass, modifiers, blockName, [className]);
54
+ return (
55
+ <>
56
+ {type === LinkTypes.Backwards && icon}
57
+ {children}
58
+ {type === LinkTypes.Forwards && icon}
59
+ </>
60
+ );
61
+ }
62
+
63
+ /**
64
+ * A component that uses an `href` prop or a child anchor element, to create
65
+ * an anchor element with added styling and conventions.
66
+ */
67
+ const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
68
+ (props, ref: any) => {
69
+ const {
70
+ additionalStyles = {},
71
+ attributes,
72
+ children,
73
+ className,
74
+ href,
75
+ id = generateUUID(),
76
+ type = LinkTypes.Default,
77
+ } = props;
91
78
 
92
- if (!props.href) {
93
- // React Types error makes this fail: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/32832
94
- // let children = React.Children.only(props.children);
95
- if (React.Children.count(props.children) > 1) {
96
- throw new Error("Please pass only one child into Link");
79
+ // Merge the necessary props alongside any extra props for the
80
+ // anchor element.
81
+ const linkProps = {
82
+ id,
83
+ href,
84
+ ...attributes,
85
+ };
86
+ // The LinkTypes.Default type.
87
+ let variant = "link";
88
+
89
+ if (typeof children === "string" && !href) {
90
+ throw new Error("Link needs prop 'href'");
97
91
  }
98
- const children = props.children[0] ? props.children[0] : props.children;
99
- childProps = children.props;
100
92
 
101
- return React.cloneElement(
102
- children,
103
- {
104
- className: linkClassName,
105
- ...linkProps,
106
- ...childProps,
107
- ref,
108
- },
109
- [children.props.children]
110
- );
111
- } else {
112
- return React.createElement(
113
- "a",
114
- {
115
- ...linkProps,
116
- className: linkClassName,
117
- ref,
118
- },
119
- iconLeft,
120
- props.children,
121
- iconRight
122
- );
123
- }
124
- });
93
+ if (
94
+ type === LinkTypes.Action ||
95
+ type === LinkTypes.Forwards ||
96
+ type === LinkTypes.Backwards
97
+ ) {
98
+ variant = "moreLink";
99
+ } else if (type === LinkTypes.Button) {
100
+ variant = "button";
101
+ }
102
+ const style = useStyleConfig("Link", { variant });
103
+ // Render with specific direction arrows only if the type
104
+ // is Forwards or Backwards.
105
+ const newChildren =
106
+ type === LinkTypes.Forwards || type === LinkTypes.Backwards
107
+ ? getWithDirectionIcon(children, type)
108
+ : children;
125
109
 
126
- Link.displayName = "Link";
110
+ if (!href) {
111
+ // React Types error makes this fail:
112
+ // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/32832
113
+ // let children = React.Children.only(children);
114
+ if (React.Children.count(children) > 1) {
115
+ throw new Error("Please pass only one child into `Link`.");
116
+ }
117
+ const childrenToClone: any = children[0] ? children[0] : children;
118
+ const childProps = childrenToClone.props;
119
+ return React.cloneElement(
120
+ childrenToClone,
121
+ {
122
+ className,
123
+ ...linkProps,
124
+ ...childProps,
125
+ ref,
126
+ },
127
+ [childrenToClone.props.children]
128
+ );
129
+ } else {
130
+ return (
131
+ <Box
132
+ as="a"
133
+ className={className}
134
+ ref={ref}
135
+ {...linkProps}
136
+ __css={{ ...style, ...additionalStyles }}
137
+ >
138
+ {newChildren}
139
+ </Box>
140
+ );
141
+ }
142
+ }
143
+ );
127
144
 
128
145
  export default Link;