@primer/components 31.2.0-rc.58429c9f → 31.2.0-rc.76ed571d

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 (501) hide show
  1. package/.github/workflows/ci.yml +5 -2
  2. package/.github/workflows/release.yml +1 -0
  3. package/.github/workflows/release_canary.yml +1 -0
  4. package/CHANGELOG.md +18 -0
  5. package/dist/browser.esm.js +649 -647
  6. package/dist/browser.esm.js.map +1 -1
  7. package/dist/browser.umd.js +205 -203
  8. package/dist/browser.umd.js.map +1 -1
  9. package/docs/content/ActionList2.mdx +360 -0
  10. package/docs/content/StateLabel.md +5 -4
  11. package/docs/content/getting-started.md +1 -1
  12. package/docs/content/theming.md +23 -0
  13. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +1 -3
  14. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +1 -1
  15. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +17 -0
  16. package/lib/ActionList/Divider.jsx +29 -0
  17. package/lib/ActionList/Group.jsx +23 -0
  18. package/lib/ActionList/Header.js +1 -1
  19. package/lib/ActionList/Header.jsx +66 -0
  20. package/lib/ActionList/Item.jsx +301 -0
  21. package/lib/ActionList/List.jsx +138 -0
  22. package/lib/ActionList/index.js +12 -23
  23. package/lib/ActionList2/Description.d.ts +12 -0
  24. package/lib/ActionList2/Description.js +53 -0
  25. package/lib/ActionList2/Description.jsx +30 -0
  26. package/lib/ActionList2/Divider.d.ts +5 -0
  27. package/lib/ActionList2/Divider.js +35 -0
  28. package/lib/ActionList2/Divider.jsx +22 -0
  29. package/lib/ActionList2/Group.d.ts +11 -0
  30. package/lib/ActionList2/Group.js +57 -0
  31. package/lib/ActionList2/Group.jsx +25 -0
  32. package/lib/ActionList2/Header.d.ts +26 -0
  33. package/lib/ActionList2/Header.js +55 -0
  34. package/lib/ActionList2/Header.jsx +36 -0
  35. package/lib/ActionList2/Item.d.ts +63 -0
  36. package/lib/ActionList2/Item.js +244 -0
  37. package/lib/ActionList2/Item.jsx +174 -0
  38. package/lib/ActionList2/LinkItem.d.ts +17 -0
  39. package/lib/ActionList2/LinkItem.js +57 -0
  40. package/lib/ActionList2/LinkItem.jsx +28 -0
  41. package/lib/ActionList2/List.d.ts +26 -0
  42. package/lib/ActionList2/List.js +59 -0
  43. package/lib/ActionList2/List.jsx +41 -0
  44. package/lib/ActionList2/Selection.d.ts +5 -0
  45. package/lib/ActionList2/Selection.js +70 -0
  46. package/lib/ActionList2/Selection.jsx +36 -0
  47. package/lib/ActionList2/Visuals.d.ts +9 -0
  48. package/lib/ActionList2/Visuals.js +90 -0
  49. package/lib/ActionList2/Visuals.jsx +48 -0
  50. package/lib/ActionList2/index.d.ts +36 -0
  51. package/lib/ActionList2/index.js +29 -0
  52. package/lib/ActionMenu.jsx +73 -0
  53. package/lib/AnchoredOverlay/AnchoredOverlay.jsx +100 -0
  54. package/lib/AnchoredOverlay/index.js +4 -12
  55. package/lib/Autocomplete/Autocomplete.d.ts +28 -28
  56. package/lib/Autocomplete/Autocomplete.jsx +100 -0
  57. package/lib/Autocomplete/AutocompleteContext.jsx +5 -0
  58. package/lib/Autocomplete/AutocompleteInput.d.ts +28 -28
  59. package/lib/Autocomplete/AutocompleteInput.jsx +113 -0
  60. package/lib/Autocomplete/AutocompleteMenu.jsx +190 -0
  61. package/lib/Autocomplete/AutocompleteOverlay.jsx +55 -0
  62. package/lib/Autocomplete/index.js +7 -14
  63. package/lib/Avatar.jsx +34 -0
  64. package/lib/AvatarPair.jsx +29 -0
  65. package/lib/AvatarStack.jsx +151 -0
  66. package/lib/BaseStyles.jsx +65 -0
  67. package/lib/BorderBox.jsx +18 -0
  68. package/lib/Box.jsx +10 -0
  69. package/lib/BranchName.jsx +20 -0
  70. package/lib/Breadcrumbs.jsx +74 -0
  71. package/lib/Button/Button.d.ts +25 -25
  72. package/lib/Button/Button.jsx +60 -0
  73. package/lib/Button/ButtonBase.jsx +36 -0
  74. package/lib/Button/ButtonClose.d.ts +45 -45
  75. package/lib/Button/ButtonClose.jsx +55 -0
  76. package/lib/Button/ButtonDanger.d.ts +25 -25
  77. package/lib/Button/ButtonDanger.jsx +63 -0
  78. package/lib/Button/ButtonGroup.jsx +55 -0
  79. package/lib/Button/ButtonInvisible.d.ts +25 -25
  80. package/lib/Button/ButtonInvisible.jsx +52 -0
  81. package/lib/Button/ButtonOutline.d.ts +25 -25
  82. package/lib/Button/ButtonOutline.jsx +63 -0
  83. package/lib/Button/ButtonPrimary.d.ts +25 -25
  84. package/lib/Button/ButtonPrimary.jsx +62 -0
  85. package/lib/Button/ButtonStyles.jsx +37 -0
  86. package/lib/Button/ButtonTableList.jsx +49 -0
  87. package/lib/Button/index.js +21 -70
  88. package/lib/Caret.jsx +93 -0
  89. package/lib/CircleBadge.jsx +43 -0
  90. package/lib/CircleOcticon.d.ts +42 -42
  91. package/lib/CircleOcticon.jsx +21 -0
  92. package/lib/CounterLabel.jsx +44 -0
  93. package/lib/Details.jsx +21 -0
  94. package/lib/Dialog/ConfirmationDialog.jsx +146 -0
  95. package/lib/Dialog/Dialog.js +1 -0
  96. package/lib/Dialog/Dialog.jsx +273 -0
  97. package/lib/Dialog.d.ts +45 -45
  98. package/lib/Dialog.jsx +131 -0
  99. package/lib/Dropdown.d.ts +176 -176
  100. package/lib/Dropdown.jsx +134 -0
  101. package/lib/DropdownMenu/DropdownButton.d.ts +46 -46
  102. package/lib/DropdownMenu/DropdownButton.jsx +14 -0
  103. package/lib/DropdownMenu/DropdownMenu.jsx +70 -0
  104. package/lib/DropdownMenu/index.js +6 -20
  105. package/lib/DropdownStyles.js +18 -26
  106. package/lib/FilterList.d.ts +42 -42
  107. package/lib/FilterList.jsx +63 -0
  108. package/lib/FilteredActionList/FilteredActionList.jsx +100 -0
  109. package/lib/FilteredActionList/index.js +4 -12
  110. package/lib/FilteredSearch.jsx +29 -0
  111. package/lib/Flash.jsx +70 -0
  112. package/lib/Flex.jsx +15 -0
  113. package/lib/FormGroup.jsx +25 -0
  114. package/lib/Grid.jsx +15 -0
  115. package/lib/Header.jsx +90 -0
  116. package/lib/Heading.jsx +21 -0
  117. package/lib/Label.jsx +84 -0
  118. package/lib/LabelGroup.jsx +19 -0
  119. package/lib/Link.jsx +38 -0
  120. package/lib/NewButton/button-counter.d.ts +6 -0
  121. package/lib/NewButton/button-counter.js +31 -0
  122. package/lib/NewButton/button-counter.jsx +14 -0
  123. package/lib/NewButton/button.d.ts +13 -0
  124. package/lib/NewButton/button.js +316 -0
  125. package/lib/NewButton/button.jsx +278 -0
  126. package/lib/NewButton/index.d.ts +14 -0
  127. package/lib/NewButton/index.js +8 -0
  128. package/lib/NewButton/types.d.ts +32 -0
  129. package/lib/NewButton/types.js +2 -0
  130. package/lib/Overlay.js +3 -1
  131. package/lib/Overlay.jsx +156 -0
  132. package/lib/Pagehead.jsx +18 -0
  133. package/lib/Pagination/Pagination.jsx +163 -0
  134. package/lib/Pagination/index.js +6 -12
  135. package/lib/Pagination/model.jsx +174 -0
  136. package/lib/PointerBox.jsx +25 -0
  137. package/lib/Popover.jsx +210 -0
  138. package/lib/Portal/Portal.js +3 -2
  139. package/lib/Portal/Portal.jsx +79 -0
  140. package/lib/Portal/index.js +5 -16
  141. package/lib/Position.d.ts +4 -4
  142. package/lib/Position.jsx +46 -0
  143. package/lib/ProgressBar.jsx +39 -0
  144. package/lib/SelectMenu/SelectMenu.d.ts +246 -246
  145. package/lib/SelectMenu/SelectMenu.jsx +114 -0
  146. package/lib/SelectMenu/SelectMenuContext.jsx +5 -0
  147. package/lib/SelectMenu/SelectMenuDivider.jsx +43 -0
  148. package/lib/SelectMenu/SelectMenuFilter.jsx +59 -0
  149. package/lib/SelectMenu/SelectMenuFooter.jsx +46 -0
  150. package/lib/SelectMenu/SelectMenuHeader.jsx +44 -0
  151. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  152. package/lib/SelectMenu/SelectMenuItem.jsx +143 -0
  153. package/lib/SelectMenu/SelectMenuList.jsx +60 -0
  154. package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +21 -0
  155. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  156. package/lib/SelectMenu/SelectMenuModal.jsx +119 -0
  157. package/lib/SelectMenu/SelectMenuTab.jsx +93 -0
  158. package/lib/SelectMenu/SelectMenuTabPanel.jsx +43 -0
  159. package/lib/SelectMenu/SelectMenuTabs.jsx +58 -0
  160. package/lib/SelectMenu/hooks/useKeyboardNav.js +80 -96
  161. package/lib/SelectMenu/index.js +7 -14
  162. package/lib/SelectPanel/SelectPanel.jsx +105 -0
  163. package/lib/SelectPanel/index.js +4 -12
  164. package/lib/SideNav.jsx +177 -0
  165. package/lib/Spinner.jsx +35 -0
  166. package/lib/StateLabel.d.ts +1 -1
  167. package/lib/StateLabel.js +6 -1
  168. package/lib/StateLabel.jsx +94 -0
  169. package/lib/StyledOcticon.jsx +20 -0
  170. package/lib/SubNav.jsx +104 -0
  171. package/lib/TabNav.jsx +60 -0
  172. package/lib/Text.jsx +14 -0
  173. package/lib/TextInput.jsx +23 -0
  174. package/lib/TextInputWithTokens.d.ts +28 -28
  175. package/lib/TextInputWithTokens.jsx +218 -0
  176. package/lib/ThemeProvider.jsx +130 -0
  177. package/lib/Timeline.d.ts +43 -43
  178. package/lib/Timeline.jsx +124 -0
  179. package/lib/Token/AvatarToken.d.ts +1 -1
  180. package/lib/Token/AvatarToken.jsx +54 -0
  181. package/lib/Token/IssueLabelToken.d.ts +1 -1
  182. package/lib/Token/IssueLabelToken.jsx +125 -0
  183. package/lib/Token/Token.d.ts +1 -1
  184. package/lib/Token/Token.jsx +103 -0
  185. package/lib/Token/TokenBase.jsx +88 -0
  186. package/lib/Token/_RemoveTokenButton.jsx +108 -0
  187. package/lib/Token/_TokenTextContainer.jsx +49 -0
  188. package/lib/Token/index.js +11 -30
  189. package/lib/Tooltip.jsx +246 -0
  190. package/lib/Truncate.jsx +27 -0
  191. package/lib/UnderlineNav.jsx +90 -0
  192. package/lib/_TextInputWrapper.js +2 -2
  193. package/lib/_TextInputWrapper.jsx +120 -0
  194. package/lib/_UnstyledTextInput.jsx +22 -0
  195. package/lib/__tests__/ActionList.test.jsx +49 -0
  196. package/lib/__tests__/ActionList.types.test.jsx +45 -0
  197. package/lib/__tests__/ActionList2.test.d.ts +1 -0
  198. package/lib/__tests__/ActionList2.test.js +53 -0
  199. package/lib/__tests__/ActionList2.test.jsx +46 -0
  200. package/lib/__tests__/ActionMenu.test.jsx +124 -0
  201. package/lib/__tests__/AnchoredOverlay.test.js +4 -2
  202. package/lib/__tests__/AnchoredOverlay.test.jsx +121 -0
  203. package/lib/__tests__/Autocomplete.test.jsx +299 -0
  204. package/lib/__tests__/Avatar.test.jsx +42 -0
  205. package/lib/__tests__/AvatarStack.test.jsx +43 -0
  206. package/lib/__tests__/BorderBox.test.jsx +36 -0
  207. package/lib/__tests__/Box.test.jsx +41 -0
  208. package/lib/__tests__/BranchName.test.jsx +27 -0
  209. package/lib/__tests__/Breadcrumbs.test.jsx +28 -0
  210. package/lib/__tests__/BreadcrumbsItem.test.jsx +31 -0
  211. package/lib/__tests__/Button.test.jsx +100 -0
  212. package/lib/__tests__/Caret.test.jsx +37 -0
  213. package/lib/__tests__/CircleBadge.test.jsx +55 -0
  214. package/lib/__tests__/CircleOcticon.test.jsx +45 -0
  215. package/lib/__tests__/ConfirmationDialog.test.jsx +119 -0
  216. package/lib/__tests__/CounterLabel.test.jsx +36 -0
  217. package/lib/__tests__/Details.test.jsx +85 -0
  218. package/lib/__tests__/Dialog.test.jsx +139 -0
  219. package/lib/__tests__/Dropdown.test.jsx +49 -0
  220. package/lib/__tests__/DropdownMenu.test.jsx +119 -0
  221. package/lib/__tests__/FilterList.test.jsx +27 -0
  222. package/lib/__tests__/FilterListItem.test.jsx +31 -0
  223. package/lib/__tests__/FilteredSearch.test.jsx +27 -0
  224. package/lib/__tests__/Flash.test.jsx +36 -0
  225. package/lib/__tests__/Flex.test.jsx +51 -0
  226. package/lib/__tests__/FormGroup.test.jsx +36 -0
  227. package/lib/__tests__/Grid.test.jsx +69 -0
  228. package/lib/__tests__/Header.test.jsx +45 -0
  229. package/lib/__tests__/Heading.test.jsx +71 -0
  230. package/lib/__tests__/KeyPaths.types.test.d.ts +2 -1
  231. package/lib/__tests__/KeyPaths.types.test.js +5 -8
  232. package/lib/__tests__/Label.test.jsx +33 -0
  233. package/lib/__tests__/LabelGroup.test.jsx +29 -0
  234. package/lib/__tests__/Link.test.jsx +43 -0
  235. package/lib/__tests__/Merge.types.test.js +13 -19
  236. package/lib/__tests__/NewButton.test.d.ts +1 -0
  237. package/lib/__tests__/NewButton.test.js +86 -0
  238. package/lib/__tests__/NewButton.test.jsx +55 -0
  239. package/lib/__tests__/Overlay.test.jsx +105 -0
  240. package/lib/__tests__/Pagehead.test.jsx +25 -0
  241. package/lib/__tests__/Pagination/Pagination.test.jsx +32 -0
  242. package/lib/__tests__/Pagination/PaginationModel.test.jsx +118 -0
  243. package/lib/__tests__/PointerBox.test.jsx +33 -0
  244. package/lib/__tests__/Popover.test.jsx +58 -0
  245. package/lib/__tests__/Portal.test.jsx +102 -0
  246. package/lib/__tests__/Position.test.jsx +96 -0
  247. package/lib/__tests__/ProgressBar.test.jsx +38 -0
  248. package/lib/__tests__/SelectMenu.test.jsx +120 -0
  249. package/lib/__tests__/SelectPanel.test.jsx +48 -0
  250. package/lib/__tests__/SideNav.test.jsx +55 -0
  251. package/lib/__tests__/Spinner.test.jsx +41 -0
  252. package/lib/__tests__/StateLabel.test.jsx +46 -0
  253. package/lib/__tests__/StyledOcticon.test.jsx +28 -0
  254. package/lib/__tests__/SubNav.test.jsx +47 -0
  255. package/lib/__tests__/SubNavLink.test.jsx +31 -0
  256. package/lib/__tests__/TabNav.test.jsx +32 -0
  257. package/lib/__tests__/Text.test.jsx +71 -0
  258. package/lib/__tests__/TextInput.test.jsx +45 -0
  259. package/lib/__tests__/TextInputWithTokens.test.js +1 -10
  260. package/lib/__tests__/TextInputWithTokens.test.jsx +302 -0
  261. package/lib/__tests__/ThemeProvider.test.jsx +314 -0
  262. package/lib/__tests__/Timeline.test.jsx +51 -0
  263. package/lib/__tests__/Token.test.jsx +93 -0
  264. package/lib/__tests__/Tooltip.test.jsx +46 -0
  265. package/lib/__tests__/Truncate.test.jsx +41 -0
  266. package/lib/__tests__/UnderlineNav.test.jsx +53 -0
  267. package/lib/__tests__/UnderlineNavLink.test.jsx +31 -0
  268. package/lib/__tests__/behaviors/anchoredPosition.test.js +229 -376
  269. package/lib/__tests__/behaviors/focusTrap.test.jsx +184 -0
  270. package/lib/__tests__/behaviors/focusZone.test.jsx +406 -0
  271. package/lib/__tests__/behaviors/iterateFocusableElements.test.jsx +58 -0
  272. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +145 -216
  273. package/lib/__tests__/filterObject.test.js +48 -27
  274. package/lib/__tests__/hooks/useAnchoredPosition.test.jsx +29 -0
  275. package/lib/__tests__/hooks/useOnEscapePress.test.jsx +19 -0
  276. package/lib/__tests__/hooks/useOnOutsideClick.test.jsx +63 -0
  277. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.jsx +61 -0
  278. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.jsx +56 -0
  279. package/lib/__tests__/theme.test.js +33 -34
  280. package/lib/__tests__/themeGet.test.js +12 -23
  281. package/lib/__tests__/useSafeTimeout.test.jsx +36 -0
  282. package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
  283. package/lib/__tests__/utils/createSlots.test.js +75 -0
  284. package/lib/__tests__/utils/createSlots.test.jsx +57 -0
  285. package/lib/behaviors/anchoredPosition.js +205 -234
  286. package/lib/behaviors/focusTrap.js +121 -157
  287. package/lib/behaviors/focusZone.js +434 -509
  288. package/lib/behaviors/scrollIntoViewingArea.js +18 -35
  289. package/lib/constants.js +39 -43
  290. package/lib/drafts.d.ts +8 -0
  291. package/lib/drafts.js +21 -0
  292. package/lib/hooks/index.js +16 -60
  293. package/lib/hooks/useAnchoredPosition.js +32 -39
  294. package/lib/hooks/useCombinedRefs.d.ts +2 -2
  295. package/lib/hooks/useCombinedRefs.js +32 -38
  296. package/lib/hooks/useDetails.jsx +39 -0
  297. package/lib/hooks/useDialog.js +72 -96
  298. package/lib/hooks/useFocusTrap.js +43 -60
  299. package/lib/hooks/useFocusZone.js +54 -50
  300. package/lib/hooks/useOnEscapePress.js +25 -36
  301. package/lib/hooks/useOnOutsideClick.jsx +61 -0
  302. package/lib/hooks/useOpenAndCloseFocus.js +22 -34
  303. package/lib/hooks/useOverlay.jsx +15 -0
  304. package/lib/hooks/useProvidedRefOrCreate.js +10 -14
  305. package/lib/hooks/useProvidedStateOrCreate.js +13 -16
  306. package/lib/hooks/useRenderForcingRef.js +13 -17
  307. package/lib/hooks/useResizeObserver.js +15 -18
  308. package/lib/hooks/useSafeTimeout.js +22 -30
  309. package/lib/hooks/useScrollFlash.js +16 -23
  310. package/lib/index.d.ts +2 -0
  311. package/lib/index.js +163 -636
  312. package/lib/polyfills/eventListenerSignal.js +37 -45
  313. package/lib/stories/ActionList2.stories.js +908 -0
  314. package/lib/stories/NewButton.stories.js +230 -0
  315. package/lib/stories/TextInput.stories.js +144 -0
  316. package/lib/stories/Token.stories.js +19 -2
  317. package/lib/sx.d.ts +2 -0
  318. package/lib/sx.js +10 -14
  319. package/lib/theme-preval.js +65 -2945
  320. package/lib/theme.js +3 -12
  321. package/lib/utils/create-slots.d.ts +17 -0
  322. package/lib/utils/create-slots.js +105 -0
  323. package/lib/utils/create-slots.jsx +65 -0
  324. package/lib/utils/deprecate.jsx +59 -0
  325. package/lib/utils/isNumeric.jsx +7 -0
  326. package/lib/utils/iterateFocusableElements.js +63 -85
  327. package/lib/utils/ssr.jsx +6 -0
  328. package/lib/utils/test-deprecations.jsx +20 -0
  329. package/lib/utils/test-helpers.jsx +8 -0
  330. package/lib/utils/test-matchers.jsx +100 -0
  331. package/lib/utils/testing.d.ts +14 -1
  332. package/lib/utils/testing.jsx +206 -0
  333. package/lib/utils/theme.js +33 -47
  334. package/lib/utils/types/AriaRole.js +2 -1
  335. package/lib/utils/types/ComponentProps.js +2 -1
  336. package/lib/utils/types/Flatten.js +2 -1
  337. package/lib/utils/types/KeyPaths.d.ts +1 -1
  338. package/lib/utils/types/KeyPaths.js +2 -1
  339. package/lib/utils/types/MandateProps.js +16 -1
  340. package/lib/utils/types/Merge.js +2 -1
  341. package/lib/utils/types/index.js +16 -69
  342. package/lib/utils/uniqueId.js +5 -8
  343. package/lib/utils/use-force-update.d.ts +1 -0
  344. package/lib/utils/use-force-update.js +13 -0
  345. package/lib/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  346. package/lib/utils/useIsomorphicLayoutEffect.js +9 -0
  347. package/lib/utils/userAgent.js +8 -12
  348. package/lib-esm/ActionList/Header.js +1 -1
  349. package/lib-esm/ActionList2/Description.d.ts +12 -0
  350. package/lib-esm/ActionList2/Description.js +37 -0
  351. package/lib-esm/ActionList2/Divider.d.ts +5 -0
  352. package/lib-esm/ActionList2/Divider.js +23 -0
  353. package/lib-esm/ActionList2/Group.d.ts +11 -0
  354. package/lib-esm/ActionList2/Group.js +40 -0
  355. package/lib-esm/ActionList2/Header.d.ts +26 -0
  356. package/lib-esm/ActionList2/Header.js +44 -0
  357. package/lib-esm/ActionList2/Item.d.ts +63 -0
  358. package/lib-esm/ActionList2/Item.js +210 -0
  359. package/lib-esm/ActionList2/LinkItem.d.ts +17 -0
  360. package/lib-esm/ActionList2/LinkItem.js +43 -0
  361. package/lib-esm/ActionList2/List.d.ts +26 -0
  362. package/lib-esm/ActionList2/List.js +37 -0
  363. package/lib-esm/ActionList2/Selection.d.ts +5 -0
  364. package/lib-esm/ActionList2/Selection.js +52 -0
  365. package/lib-esm/ActionList2/Visuals.d.ts +9 -0
  366. package/lib-esm/ActionList2/Visuals.js +68 -0
  367. package/lib-esm/ActionList2/index.d.ts +36 -0
  368. package/lib-esm/ActionList2/index.js +33 -0
  369. package/lib-esm/Autocomplete/Autocomplete.d.ts +28 -28
  370. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +28 -28
  371. package/lib-esm/Button/Button.d.ts +25 -25
  372. package/lib-esm/Button/ButtonClose.d.ts +45 -45
  373. package/lib-esm/Button/ButtonDanger.d.ts +25 -25
  374. package/lib-esm/Button/ButtonInvisible.d.ts +25 -25
  375. package/lib-esm/Button/ButtonOutline.d.ts +25 -25
  376. package/lib-esm/Button/ButtonPrimary.d.ts +25 -25
  377. package/lib-esm/CircleOcticon.d.ts +42 -42
  378. package/lib-esm/Dialog/Dialog.js +1 -0
  379. package/lib-esm/Dialog.d.ts +45 -45
  380. package/lib-esm/Dropdown.d.ts +176 -176
  381. package/lib-esm/DropdownMenu/DropdownButton.d.ts +46 -46
  382. package/lib-esm/FilterList.d.ts +42 -42
  383. package/lib-esm/NewButton/button-counter.d.ts +6 -0
  384. package/lib-esm/NewButton/button-counter.js +18 -0
  385. package/lib-esm/NewButton/button.d.ts +13 -0
  386. package/lib-esm/NewButton/button.js +298 -0
  387. package/lib-esm/NewButton/index.d.ts +14 -0
  388. package/lib-esm/NewButton/index.js +5 -0
  389. package/lib-esm/NewButton/types.d.ts +32 -0
  390. package/lib-esm/NewButton/types.js +1 -0
  391. package/lib-esm/Overlay.js +2 -1
  392. package/lib-esm/Portal/Portal.js +2 -1
  393. package/lib-esm/Position.d.ts +4 -4
  394. package/lib-esm/SelectMenu/SelectMenu.d.ts +246 -246
  395. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  396. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  397. package/lib-esm/StateLabel.d.ts +1 -1
  398. package/lib-esm/StateLabel.js +7 -2
  399. package/lib-esm/TextInputWithTokens.d.ts +28 -28
  400. package/lib-esm/Timeline.d.ts +43 -43
  401. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  402. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  403. package/lib-esm/Token/Token.d.ts +1 -1
  404. package/lib-esm/_TextInputWrapper.js +2 -2
  405. package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
  406. package/lib-esm/__tests__/ActionList2.test.js +41 -0
  407. package/lib-esm/__tests__/AnchoredOverlay.test.js +4 -2
  408. package/lib-esm/__tests__/KeyPaths.types.test.d.ts +2 -1
  409. package/lib-esm/__tests__/NewButton.test.d.ts +1 -0
  410. package/lib-esm/__tests__/NewButton.test.js +76 -0
  411. package/lib-esm/__tests__/TextInputWithTokens.test.js +1 -10
  412. package/lib-esm/__tests__/utils/createSlots.test.d.ts +1 -0
  413. package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
  414. package/lib-esm/drafts.d.ts +8 -0
  415. package/lib-esm/drafts.js +9 -0
  416. package/lib-esm/hooks/useAnchoredPosition.js +2 -1
  417. package/lib-esm/hooks/useCombinedRefs.d.ts +2 -2
  418. package/lib-esm/hooks/useCombinedRefs.js +3 -2
  419. package/lib-esm/hooks/useResizeObserver.js +2 -2
  420. package/lib-esm/index.d.ts +2 -0
  421. package/lib-esm/index.js +1 -0
  422. package/lib-esm/stories/ActionList2.stories.js +796 -0
  423. package/lib-esm/stories/NewButton.stories.js +178 -0
  424. package/lib-esm/stories/TextInput.stories.js +117 -0
  425. package/lib-esm/stories/Token.stories.js +14 -1
  426. package/lib-esm/sx.d.ts +2 -0
  427. package/lib-esm/sx.js +3 -1
  428. package/lib-esm/theme-preval.js +81 -2
  429. package/lib-esm/utils/create-slots.d.ts +17 -0
  430. package/lib-esm/utils/create-slots.js +84 -0
  431. package/lib-esm/utils/testing.d.ts +14 -1
  432. package/lib-esm/utils/types/KeyPaths.d.ts +1 -1
  433. package/lib-esm/utils/use-force-update.d.ts +1 -0
  434. package/lib-esm/utils/use-force-update.js +6 -0
  435. package/lib-esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  436. package/lib-esm/utils/useIsomorphicLayoutEffect.js +3 -0
  437. package/migrating.md +1 -1
  438. package/package-lock.json +168 -16
  439. package/package.json +9 -5
  440. package/script/build +3 -1
  441. package/src/ActionList/Header.tsx +1 -1
  442. package/src/ActionList2/Description.tsx +49 -0
  443. package/src/ActionList2/Divider.tsx +24 -0
  444. package/src/ActionList2/Group.tsx +34 -0
  445. package/src/ActionList2/Header.tsx +58 -0
  446. package/src/ActionList2/Item.tsx +245 -0
  447. package/src/ActionList2/LinkItem.tsx +49 -0
  448. package/src/ActionList2/List.tsx +55 -0
  449. package/src/ActionList2/Selection.tsx +40 -0
  450. package/src/ActionList2/Visuals.tsx +76 -0
  451. package/src/ActionList2/index.ts +39 -0
  452. package/src/Dialog/Dialog.tsx +1 -0
  453. package/src/NewButton/button-counter.tsx +15 -0
  454. package/src/NewButton/button.tsx +279 -0
  455. package/src/NewButton/index.ts +10 -0
  456. package/src/NewButton/types.ts +36 -0
  457. package/src/Overlay.tsx +2 -1
  458. package/src/Portal/Portal.tsx +2 -1
  459. package/src/StateLabel.tsx +14 -2
  460. package/src/_TextInputWrapper.tsx +7 -0
  461. package/src/__tests__/ActionList2.test.tsx +47 -0
  462. package/src/__tests__/AnchoredOverlay.test.tsx +2 -2
  463. package/src/__tests__/KeyPaths.types.test.ts +2 -1
  464. package/src/__tests__/NewButton.test.tsx +64 -0
  465. package/src/__tests__/TextInputWithTokens.test.tsx +0 -10
  466. package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
  467. package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +35 -135
  468. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +1 -0
  469. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +1 -0
  470. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +1 -0
  471. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +1 -0
  472. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +1 -0
  473. package/src/__tests__/__snapshots__/NewButton.test.tsx.snap +182 -0
  474. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +4 -0
  475. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +1 -0
  476. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +13 -6
  477. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +1 -0
  478. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +66 -0
  479. package/src/__tests__/__snapshots__/Token.test.tsx.snap +17 -0
  480. package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
  481. package/src/__tests__/utils/createSlots.test.tsx +74 -0
  482. package/src/drafts.ts +10 -0
  483. package/src/hooks/useAnchoredPosition.ts +2 -1
  484. package/src/hooks/useCombinedRefs.ts +3 -3
  485. package/src/hooks/useResizeObserver.ts +2 -2
  486. package/src/index.ts +2 -0
  487. package/src/stories/ActionList2.stories.tsx +1291 -0
  488. package/src/stories/Button.stories.tsx +1 -1
  489. package/src/stories/NewButton.stories.tsx +201 -0
  490. package/src/stories/TextInput.stories.tsx +113 -0
  491. package/src/stories/Token.stories.tsx +12 -1
  492. package/src/sx.ts +3 -0
  493. package/src/theme-preval.js +1 -0
  494. package/src/utils/create-slots.tsx +96 -0
  495. package/src/utils/types/KeyPaths.ts +7 -1
  496. package/src/utils/use-force-update.ts +7 -0
  497. package/src/utils/useIsomorphicLayoutEffect.ts +10 -0
  498. package/stats.html +1 -1
  499. package/tsconfig.base.json +20 -0
  500. package/tsconfig.build.json +2 -2
  501. package/tsconfig.json +4 -17
@@ -1,27 +1,21 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.canMergeTwoTypes = canMergeTwoTypes;
7
- exports.overridesAsExpected = overridesAsExpected;
8
- exports.optionalityIsPreservedInFirstParameter = optionalityIsPreservedInFirstParameter;
9
- exports.optionalityIsPreservedInSecondParameter = optionalityIsPreservedInSecondParameter;
10
-
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optionalityIsPreservedInSecondParameter = exports.optionalityIsPreservedInFirstParameter = exports.overridesAsExpected = exports.canMergeTwoTypes = void 0;
11
4
  function canMergeTwoTypes(x) {
12
- return x;
5
+ return x;
13
6
  }
14
-
7
+ exports.canMergeTwoTypes = canMergeTwoTypes;
15
8
  function overridesAsExpected(x) {
16
- return x;
9
+ return x;
17
10
  }
18
-
11
+ exports.overridesAsExpected = overridesAsExpected;
19
12
  function optionalityIsPreservedInFirstParameter(x) {
20
- // @ts-expect-error: d is optional
21
- return x;
13
+ // @ts-expect-error: d is optional
14
+ return x;
22
15
  }
23
-
16
+ exports.optionalityIsPreservedInFirstParameter = optionalityIsPreservedInFirstParameter;
24
17
  function optionalityIsPreservedInSecondParameter(x) {
25
- // @ts-expect-error: d is optional
26
- return x;
27
- }
18
+ // @ts-expect-error: d is optional
19
+ return x;
20
+ }
21
+ exports.optionalityIsPreservedInSecondParameter = optionalityIsPreservedInSecondParameter;
@@ -0,0 +1 @@
1
+ import 'babel-polyfill';
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+
5
+ var _NewButton = require("../NewButton");
6
+
7
+ var _testing = require("../utils/testing");
8
+
9
+ var _react2 = require("@testing-library/react");
10
+
11
+ var _jestAxe = require("jest-axe");
12
+
13
+ require("babel-polyfill");
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+
17
+ expect.extend(_jestAxe.toHaveNoViolations); // eslint-disable-next-line @typescript-eslint/no-empty-function
18
+
19
+ function noop() {}
20
+
21
+ describe('Button', () => {
22
+ (0, _testing.behavesAsComponent)({
23
+ Component: _NewButton.NewButton
24
+ });
25
+ it('renders a <button>', () => {
26
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, null, "Default")).type).toEqual('button');
27
+ });
28
+ it('should have no axe violations', async () => {
29
+ const {
30
+ container
31
+ } = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, null, "Click here"));
32
+ const results = await (0, _jestAxe.axe)(container);
33
+ expect(results).toHaveNoViolations();
34
+ (0, _react2.cleanup)();
35
+ });
36
+ it('preserves "onClick" prop', () => {
37
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
38
+ onClick: noop
39
+ }, "Noop")).props.onClick).toEqual(noop);
40
+ });
41
+ it('respects width props', () => {
42
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
43
+ sx: {
44
+ width: 200
45
+ }
46
+ }, "Block"))).toHaveStyleRule('width', '200px');
47
+ });
48
+ it('respects the "disabled" prop', () => {
49
+ const item = (0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
50
+ disabled: true
51
+ }, " Disabled"));
52
+ expect(item.props.disabled).toEqual(true);
53
+ expect(item).toMatchSnapshot();
54
+ });
55
+ it('respects the "variant" prop', () => {
56
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
57
+ size: "small"
58
+ }, "Smol"))).toHaveStyleRule('font-size', '12px');
59
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
60
+ size: "large"
61
+ }, "Large"))).toHaveStyleRule('font-size', '16px');
62
+ });
63
+ it('respects the "fontSize" prop over the "variant" prop', () => {
64
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
65
+ size: "small",
66
+ sx: {
67
+ fontSize: 20
68
+ }
69
+ }, "Big Smol"))).toHaveStyleRule('font-size', '20px');
70
+ });
71
+ it('styles primary button appropriately', () => {
72
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
73
+ variant: "primary"
74
+ }, "Primary"))).toHaveStyleRule('background-color', '#2da44e');
75
+ });
76
+ it('styles invisible button appropriately', () => {
77
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
78
+ variant: "invisible"
79
+ }, "Invisible"))).toHaveStyleRule('background-color', 'transparent');
80
+ });
81
+ it('styles danger button appropriately', () => {
82
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
83
+ variant: "danger"
84
+ }, "Danger"))).toHaveStyleRule('background-color', '#f6f8fa');
85
+ });
86
+ });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const NewButton_1 = require("../NewButton");
8
+ const testing_1 = require("../utils/testing");
9
+ const react_2 = require("@testing-library/react");
10
+ const jest_axe_1 = require("jest-axe");
11
+ require("babel-polyfill");
12
+ expect.extend(jest_axe_1.toHaveNoViolations);
13
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
14
+ function noop() { }
15
+ describe('Button', () => {
16
+ testing_1.behavesAsComponent({ Component: NewButton_1.NewButton });
17
+ it('renders a <button>', () => {
18
+ expect(testing_1.render(<NewButton_1.NewButton>Default</NewButton_1.NewButton>).type).toEqual('button');
19
+ });
20
+ it('should have no axe violations', async () => {
21
+ const { container } = react_2.render(<NewButton_1.NewButton>Click here</NewButton_1.NewButton>);
22
+ const results = await jest_axe_1.axe(container);
23
+ expect(results).toHaveNoViolations();
24
+ react_2.cleanup();
25
+ });
26
+ it('preserves "onClick" prop', () => {
27
+ expect(testing_1.render(<NewButton_1.NewButton onClick={noop}>Noop</NewButton_1.NewButton>).props.onClick).toEqual(noop);
28
+ });
29
+ it('respects width props', () => {
30
+ expect(testing_1.render(<NewButton_1.NewButton sx={{ width: 200 }}>Block</NewButton_1.NewButton>)).toHaveStyleRule('width', '200px');
31
+ });
32
+ it('respects the "disabled" prop', () => {
33
+ const item = testing_1.render(<NewButton_1.NewButton disabled> Disabled</NewButton_1.NewButton>);
34
+ expect(item.props.disabled).toEqual(true);
35
+ expect(item).toMatchSnapshot();
36
+ });
37
+ it('respects the "variant" prop', () => {
38
+ expect(testing_1.render(<NewButton_1.NewButton size="small">Smol</NewButton_1.NewButton>)).toHaveStyleRule('font-size', '12px');
39
+ expect(testing_1.render(<NewButton_1.NewButton size="large">Large</NewButton_1.NewButton>)).toHaveStyleRule('font-size', '16px');
40
+ });
41
+ it('respects the "fontSize" prop over the "variant" prop', () => {
42
+ expect(testing_1.render(<NewButton_1.NewButton size="small" sx={{ fontSize: 20 }}>
43
+ Big Smol
44
+ </NewButton_1.NewButton>)).toHaveStyleRule('font-size', '20px');
45
+ });
46
+ it('styles primary button appropriately', () => {
47
+ expect(testing_1.render(<NewButton_1.NewButton variant="primary">Primary</NewButton_1.NewButton>)).toHaveStyleRule('background-color', '#2da44e');
48
+ });
49
+ it('styles invisible button appropriately', () => {
50
+ expect(testing_1.render(<NewButton_1.NewButton variant="invisible">Invisible</NewButton_1.NewButton>)).toHaveStyleRule('background-color', 'transparent');
51
+ });
52
+ it('styles danger button appropriately', () => {
53
+ expect(testing_1.render(<NewButton_1.NewButton variant="danger">Danger</NewButton_1.NewButton>)).toHaveStyleRule('background-color', '#f6f8fa');
54
+ });
55
+ });
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const react_1 = __importStar(require("react"));
26
+ const __1 = require("..");
27
+ const react_2 = require("@testing-library/react");
28
+ const user_event_1 = __importDefault(require("@testing-library/user-event"));
29
+ const jest_axe_1 = require("jest-axe");
30
+ const theme_1 = __importDefault(require("../theme"));
31
+ const BaseStyles_1 = __importDefault(require("../BaseStyles"));
32
+ const ThemeProvider_1 = require("../ThemeProvider");
33
+ expect.extend(jest_axe_1.toHaveNoViolations);
34
+ const TestComponent = ({ initialFocus, callback }) => {
35
+ const [isOpen, setIsOpen] = react_1.useState(false);
36
+ const buttonRef = react_1.useRef(null);
37
+ const confirmButtonRef = react_1.useRef(null);
38
+ const anchorRef = react_1.useRef(null);
39
+ const closeOverlay = () => {
40
+ setIsOpen(false);
41
+ if (callback) {
42
+ callback();
43
+ }
44
+ };
45
+ return (<ThemeProvider_1.ThemeProvider theme={theme_1.default}>
46
+ <BaseStyles_1.default>
47
+ <__1.Box position="absolute" top={0} left={0} bottom={0} right={0} ref={anchorRef}>
48
+ <__1.Button ref={buttonRef} onClick={() => setIsOpen(!isOpen)}>
49
+ open overlay
50
+ </__1.Button>
51
+ <__1.Button>outside</__1.Button>
52
+ {isOpen ? (<__1.Overlay initialFocusRef={initialFocus === 'button' ? confirmButtonRef : undefined} returnFocusRef={buttonRef} ignoreClickRefs={[buttonRef]} onEscape={closeOverlay} onClickOutside={closeOverlay} width="small">
53
+ <__1.Box display="flex" flexDirection="column" p={2}>
54
+ <__1.Text>Are you sure?</__1.Text>
55
+ <__1.ButtonDanger onClick={closeOverlay}>Cancel</__1.ButtonDanger>
56
+ <__1.Button onClick={closeOverlay} ref={confirmButtonRef}>
57
+ Confirm
58
+ </__1.Button>
59
+ </__1.Box>
60
+ </__1.Overlay>) : null}
61
+ </__1.Box>
62
+ </BaseStyles_1.default>
63
+ </ThemeProvider_1.ThemeProvider>);
64
+ };
65
+ describe('Overlay', () => {
66
+ it('should have no axe violations', async () => {
67
+ const { container } = react_2.render(<TestComponent />);
68
+ const results = await jest_axe_1.axe(container);
69
+ expect(results).toHaveNoViolations();
70
+ react_2.cleanup();
71
+ });
72
+ it('should focus element passed into function', async () => {
73
+ const { getByText } = react_2.render(<TestComponent initialFocus="button"/>);
74
+ user_event_1.default.click(getByText('open overlay'));
75
+ await react_2.waitFor(() => getByText('Confirm'));
76
+ const confirmButton = getByText('Confirm');
77
+ expect(document.activeElement).toEqual(confirmButton);
78
+ });
79
+ it('should focus first element when nothing is passed', async () => {
80
+ const { getByText } = react_2.render(<TestComponent />);
81
+ user_event_1.default.click(getByText('open overlay'));
82
+ await react_2.waitFor(() => getByText('Cancel'));
83
+ const cancelButton = getByText('Cancel');
84
+ expect(document.activeElement).toEqual(cancelButton);
85
+ });
86
+ it('should call function when user clicks outside container', () => {
87
+ const mockFunction = jest.fn();
88
+ const { getByText, queryAllByText } = react_2.render(<TestComponent callback={mockFunction}/>);
89
+ react_2.act(() => user_event_1.default.click(getByText('open overlay')));
90
+ react_2.act(() => user_event_1.default.click(getByText('outside')));
91
+ expect(mockFunction).toHaveBeenCalledTimes(1);
92
+ const cancelButtons = queryAllByText('Cancel');
93
+ expect(cancelButtons).toHaveLength(0);
94
+ });
95
+ it('should call function when user presses escape', () => {
96
+ const mockFunction = jest.fn();
97
+ const { getByText, queryAllByText } = react_2.render(<TestComponent callback={mockFunction}/>);
98
+ react_2.act(() => user_event_1.default.click(getByText('open overlay')));
99
+ const domNode = getByText('Are you sure?');
100
+ react_2.fireEvent.keyDown(domNode, { key: 'Escape', code: 'Escape', keyCode: 27, charCode: 27 });
101
+ expect(mockFunction).toHaveBeenCalledTimes(1);
102
+ const cancelButtons = queryAllByText('Cancel');
103
+ expect(cancelButtons).toHaveLength(0);
104
+ });
105
+ });
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const __1 = require("..");
8
+ const theme_1 = __importDefault(require("../theme"));
9
+ const testing_1 = require("../utils/testing");
10
+ const react_2 = require("@testing-library/react");
11
+ const jest_axe_1 = require("jest-axe");
12
+ require("babel-polyfill");
13
+ expect.extend(jest_axe_1.toHaveNoViolations);
14
+ describe('Pagehead', () => {
15
+ testing_1.behavesAsComponent({ Component: __1.Pagehead });
16
+ testing_1.checkExports('Pagehead', {
17
+ default: __1.Pagehead
18
+ });
19
+ it('should have no axe violations', async () => {
20
+ const { container } = react_2.render(<__1.Pagehead theme={theme_1.default}>Pagehead</__1.Pagehead>);
21
+ const results = await jest_axe_1.axe(container);
22
+ expect(results).toHaveNoViolations();
23
+ react_2.cleanup();
24
+ });
25
+ });
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const Pagination_1 = __importDefault(require("../../Pagination"));
8
+ const testing_1 = require("../../utils/testing");
9
+ const react_2 = require("@testing-library/react");
10
+ const jest_axe_1 = require("jest-axe");
11
+ require("babel-polyfill");
12
+ expect.extend(jest_axe_1.toHaveNoViolations);
13
+ const reqProps = { pageCount: 10, currentPage: 1 };
14
+ const comp = <Pagination_1.default {...reqProps}/>;
15
+ describe('Pagination', () => {
16
+ testing_1.behavesAsComponent({ Component: Pagination_1.default, toRender: () => comp });
17
+ it('should have no axe violations', async () => {
18
+ const { container } = react_2.render(comp);
19
+ const results = await jest_axe_1.axe(container, {
20
+ rules: {
21
+ // The skip-link rule has to do with entire documents
22
+ // and is not relevant to this component.
23
+ // See https://dequeuniversity.com/rules/axe/3.3/skip-link?application=axeAPI
24
+ 'skip-link': {
25
+ enabled: false
26
+ }
27
+ }
28
+ });
29
+ expect(results).toHaveNoViolations();
30
+ react_2.cleanup();
31
+ });
32
+ });
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("babel-polyfill");
4
+ const model_1 = require("../../Pagination/model");
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ function first(array, count = 1) {
7
+ const slice = array.slice(0, count);
8
+ return count === 1 ? slice[0] : slice;
9
+ }
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ function last(array, count = 1) {
12
+ const len = array.length;
13
+ const slice = array.slice(len - count, len);
14
+ return count === 1 ? slice[0] : slice;
15
+ }
16
+ describe('Pagination model', () => {
17
+ it('sets disabled on prev links', () => {
18
+ const model1 = model_1.buildPaginationModel(10, 1, true, 1, 2);
19
+ expect(first(model1).type).toEqual('PREV');
20
+ expect(first(model1).disabled).toBe(true);
21
+ const model2 = model_1.buildPaginationModel(10, 2, true, 1, 2);
22
+ expect(first(model2).type).toEqual('PREV');
23
+ expect(first(model2).disabled).toBe(false);
24
+ });
25
+ it('sets disabled on next links', () => {
26
+ const model1 = model_1.buildPaginationModel(10, 10, true, 1, 2);
27
+ expect(last(model1).type).toEqual('NEXT');
28
+ expect(last(model1).disabled).toBe(true);
29
+ const model2 = model_1.buildPaginationModel(10, 9, true, 1, 2);
30
+ expect(last(model2).type).toEqual('NEXT');
31
+ expect(last(model2).disabled).toBe(false);
32
+ });
33
+ it('sets the page number for prev and next links', () => {
34
+ const model = model_1.buildPaginationModel(10, 5, true, 1, 2);
35
+ expect(first(model).num).toEqual(4);
36
+ expect(last(model).num).toEqual(6);
37
+ });
38
+ it('ensures margin pages on the left', () => {
39
+ const model = model_1.buildPaginationModel(10, 10, true, 2, 0);
40
+ const slice = first(model, 5);
41
+ const expected = [
42
+ { type: 'PREV', num: 9 },
43
+ { type: 'NUM', num: 1 },
44
+ { type: 'NUM', num: 2 },
45
+ { type: 'BREAK' },
46
+ { type: 'NUM' }
47
+ ];
48
+ expect(slice).toMatchObject(expected);
49
+ });
50
+ it('ensures margin pages on the right', () => {
51
+ const model = model_1.buildPaginationModel(10, 1, true, 2, 0);
52
+ const slice = last(model, 5);
53
+ const expected = [
54
+ { type: 'NUM' },
55
+ { type: 'BREAK' },
56
+ { type: 'NUM', num: 9 },
57
+ { type: 'NUM', num: 10 },
58
+ { type: 'NEXT', num: 2 }
59
+ ];
60
+ expect(slice).toMatchObject(expected);
61
+ });
62
+ it('ensures that the current page is surrounded by the right number of pages', () => {
63
+ const model = model_1.buildPaginationModel(10, 5, true, 1, 1);
64
+ const expected = [
65
+ { type: 'PREV', num: 4 },
66
+ { type: 'NUM', num: 1 },
67
+ { type: 'BREAK' },
68
+ { type: 'NUM', num: 4 },
69
+ { type: 'NUM', num: 5, selected: true },
70
+ { type: 'NUM', num: 6 },
71
+ { type: 'BREAK' },
72
+ { type: 'NUM', num: 10 },
73
+ { type: 'NEXT', num: 6 }
74
+ ];
75
+ expect(model).toMatchObject(expected);
76
+ });
77
+ it('adds items to the right if it hits bounds to the left', () => {
78
+ const model = model_1.buildPaginationModel(15, 2, true, 1, 1);
79
+ const expected = [
80
+ { type: 'PREV', num: 1 },
81
+ { type: 'NUM', num: 1 },
82
+ { type: 'NUM', num: 2, selected: true },
83
+ { type: 'NUM', num: 3 },
84
+ // normally with a surround of 1, only 1 and 3 would be shown
85
+ // however, since 1 was already shown, we extend to 4
86
+ { type: 'NUM', num: 4 },
87
+ { type: 'BREAK' }
88
+ ];
89
+ expect(first(model, 6)).toMatchObject(expected);
90
+ });
91
+ it('adds items to the left if it hits bounds to the right', () => {
92
+ const model = model_1.buildPaginationModel(15, 14, true, 1, 1);
93
+ const expected = [
94
+ // normally with a surround of 1, only 13 and 15 would be shown
95
+ // however, since 15 was already shown, we extend to 12
96
+ { type: 'BREAK' },
97
+ { type: 'NUM', num: 12 },
98
+ { type: 'NUM', num: 13 },
99
+ { type: 'NUM', num: 14, selected: true },
100
+ { type: 'NUM', num: 15 },
101
+ { type: 'NEXT', num: 15 }
102
+ ];
103
+ expect(last(model, 6)).toMatchObject(expected);
104
+ });
105
+ it('correctly creates breaks next to the next/prev links when margin is 0', () => {
106
+ const model = model_1.buildPaginationModel(10, 5, true, 0, 1);
107
+ const expected = [
108
+ { type: 'PREV' },
109
+ { type: 'BREAK', num: 1 },
110
+ { type: 'NUM', num: 4 },
111
+ { type: 'NUM', num: 5, selected: true },
112
+ { type: 'NUM', num: 6 },
113
+ { type: 'BREAK', num: 10 },
114
+ { type: 'NEXT' }
115
+ ];
116
+ expect(model).toMatchObject(expected);
117
+ });
118
+ });
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const __1 = require("..");
8
+ const testing_1 = require("../utils/testing");
9
+ const react_2 = require("@testing-library/react");
10
+ const jest_axe_1 = require("jest-axe");
11
+ require("babel-polyfill");
12
+ expect.extend(jest_axe_1.toHaveNoViolations);
13
+ describe('PointerBox', () => {
14
+ testing_1.behavesAsComponent({ Component: __1.PointerBox });
15
+ testing_1.checkExports('PointerBox', {
16
+ default: __1.PointerBox
17
+ });
18
+ it('renders a <Caret> in <BorderBox> with relative positioning', () => {
19
+ expect(testing_1.render(<__1.PointerBox />)).toMatchSnapshot();
20
+ });
21
+ it('should have no axe violations', async () => {
22
+ const { container } = react_2.render(<__1.PointerBox />);
23
+ const results = await jest_axe_1.axe(container);
24
+ expect(results).toHaveNoViolations();
25
+ react_2.cleanup();
26
+ });
27
+ it('passes the "borderColor" prop to both <BorderBox> and <Caret>', () => {
28
+ expect(testing_1.render(<__1.PointerBox borderColor="danger.emphasis"/>)).toMatchSnapshot();
29
+ });
30
+ it('passes the "bg" prop to both <BorderBox> and <Caret>', () => {
31
+ expect(testing_1.render(<__1.PointerBox bg="danger.subtle"/>)).toMatchSnapshot();
32
+ });
33
+ });
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const Popover_1 = __importDefault(require("../Popover"));
8
+ const testing_1 = require("../utils/testing");
9
+ const react_2 = require("@testing-library/react");
10
+ const jest_axe_1 = require("jest-axe");
11
+ require("babel-polyfill");
12
+ expect.extend(jest_axe_1.toHaveNoViolations);
13
+ const comp = (<Popover_1.default caret="top" open>
14
+ <Popover_1.default.Content>Hello!</Popover_1.default.Content>
15
+ </Popover_1.default>);
16
+ describe('Popover', () => {
17
+ testing_1.behavesAsComponent({ Component: Popover_1.default, toRender: () => comp });
18
+ testing_1.checkExports('Popover', {
19
+ default: Popover_1.default
20
+ });
21
+ describe('Popover.Content', () => {
22
+ testing_1.behavesAsComponent({ Component: Popover_1.default.Content, toRender: () => comp });
23
+ });
24
+ it('should have no axe violations', async () => {
25
+ const { container } = react_2.render(<Popover_1.default caret="top" open>
26
+ <Popover_1.default.Content>Hello!</Popover_1.default.Content>
27
+ </Popover_1.default>);
28
+ const results = await jest_axe_1.axe(container);
29
+ expect(results).toHaveNoViolations();
30
+ react_2.cleanup();
31
+ });
32
+ const CARET_POSITIONS = [
33
+ 'top',
34
+ 'bottom',
35
+ 'left',
36
+ 'right',
37
+ 'bottom-left',
38
+ 'bottom-right',
39
+ 'top-left',
40
+ 'top-right',
41
+ 'left-bottom',
42
+ 'left-top',
43
+ 'right-bottom',
44
+ 'right-top'
45
+ ];
46
+ for (const pos of CARET_POSITIONS) {
47
+ it(`renders correctly for a caret position of ${pos}`, () => {
48
+ const element = (<Popover_1.default caret={pos} open>
49
+ <Popover_1.default.Content>Hello!</Popover_1.default.Content>
50
+ </Popover_1.default>);
51
+ expect(testing_1.render(element)).toMatchSnapshot();
52
+ });
53
+ }
54
+ it('renders both elements as a <div>', () => {
55
+ expect(testing_1.render(<Popover_1.default />).type).toEqual('div');
56
+ expect(testing_1.render(<Popover_1.default.Content />).type).toEqual('div');
57
+ });
58
+ });
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const index_1 = __importStar(require("../Portal/index"));
26
+ const react_1 = require("@testing-library/react");
27
+ const react_2 = __importDefault(require("react"));
28
+ const BaseStyles_1 = __importDefault(require("../BaseStyles"));
29
+ describe('Portal', () => {
30
+ it('renders a default portal into document.body (no BaseStyles present)', () => {
31
+ const { baseElement } = react_1.render(<index_1.default>123test123</index_1.default>);
32
+ const generatedRoot = baseElement.querySelector('#__primerPortalRoot__');
33
+ expect(generatedRoot).toBeInstanceOf(HTMLElement);
34
+ expect(generatedRoot?.textContent?.trim()).toEqual('123test123');
35
+ baseElement.innerHTML = '';
36
+ });
37
+ it('renders a default portal into nearest BaseStyles element', () => {
38
+ const toRender = (<div id="renderedRoot">
39
+ <BaseStyles_1.default>
40
+ <div id="baseStylesRoot">
41
+ <index_1.default>123test123</index_1.default>
42
+ </div>
43
+ </BaseStyles_1.default>
44
+ </div>);
45
+ const { baseElement } = react_1.render(toRender);
46
+ const baseStylesRoot = baseElement.querySelector('#baseStylesRoot');
47
+ const baseStylesElement = baseStylesRoot?.parentElement;
48
+ const generatedRoot = baseStylesElement?.querySelector('#__primerPortalRoot__');
49
+ expect(baseStylesRoot).toBeInstanceOf(HTMLElement);
50
+ expect(baseStylesElement).toBeInstanceOf(HTMLElement);
51
+ expect(generatedRoot).toBeInstanceOf(HTMLElement);
52
+ expect(generatedRoot?.textContent?.trim()).toEqual('123test123');
53
+ baseElement.innerHTML = '';
54
+ });
55
+ it('renders into the custom portal root (default root name - declarative)', () => {
56
+ const toRender = (<div id="renderedRoot">
57
+ <div id="__primerPortalRoot__"></div>
58
+ <index_1.default>123test123</index_1.default>
59
+ </div>);
60
+ const { baseElement } = react_1.render(toRender);
61
+ const renderedRoot = baseElement.querySelector('#renderedRoot');
62
+ const portalRoot = renderedRoot?.querySelector('#__primerPortalRoot__');
63
+ expect(portalRoot).toBeInstanceOf(HTMLElement);
64
+ expect(portalRoot?.textContent?.trim()).toEqual('123test123');
65
+ baseElement.innerHTML = '';
66
+ });
67
+ it('renders into the custom portal root (default root name - imperative)', () => {
68
+ const portalRootJSX = <div id="myPortalRoot"></div>;
69
+ let { baseElement } = react_1.render(portalRootJSX);
70
+ const portalRoot = baseElement.querySelector('#myPortalRoot');
71
+ expect(portalRoot).toBeInstanceOf(HTMLElement);
72
+ index_1.registerPortalRoot(baseElement.querySelector('#myPortalRoot'));
73
+ const toRender = <index_1.default>123test123</index_1.default>;
74
+ ({ baseElement } = react_1.render(toRender));
75
+ expect(portalRoot?.textContent?.trim()).toEqual('123test123');
76
+ baseElement.innerHTML = '';
77
+ });
78
+ it('renders into multiple custom portal roots (named)', () => {
79
+ const portalRootJSX = (<main>
80
+ <div id="myPortalRoot1"></div>
81
+ <div id="myPortalRoot2"></div>
82
+ </main>);
83
+ let { baseElement } = react_1.render(portalRootJSX);
84
+ const fancyPortalRoot1 = baseElement.querySelector('#myPortalRoot1');
85
+ const fancyPortalRoot2 = baseElement.querySelector('#myPortalRoot2');
86
+ expect(fancyPortalRoot1).toBeInstanceOf(HTMLElement);
87
+ expect(fancyPortalRoot2).toBeInstanceOf(HTMLElement);
88
+ index_1.registerPortalRoot(baseElement.querySelector('#myPortalRoot1'), 'fancyPortal1');
89
+ index_1.registerPortalRoot(baseElement.querySelector('#myPortalRoot2'), 'fancyPortal2');
90
+ const toRender = (<>
91
+ <index_1.default>123test123</index_1.default>
92
+ <index_1.default containerName="fancyPortal1">456test456</index_1.default>
93
+ <index_1.default containerName="fancyPortal2">789test789</index_1.default>
94
+ </>);
95
+ ({ baseElement } = react_1.render(toRender));
96
+ const generatedRoot = baseElement.querySelector('#__primerPortalRoot__');
97
+ expect(generatedRoot?.textContent?.trim()).toEqual('123test123');
98
+ expect(fancyPortalRoot1?.textContent?.trim()).toEqual('456test456');
99
+ expect(fancyPortalRoot2?.textContent?.trim()).toEqual('789test789');
100
+ baseElement.innerHTML = '';
101
+ });
102
+ });