@primer/components 31.2.0-rc.c7f73427 → 31.2.1-rc.0e01900c

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 (456) 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 +656 -645
  6. package/dist/browser.esm.js.map +1 -1
  7. package/dist/browser.umd.js +211 -200
  8. package/dist/browser.umd.js.map +1 -1
  9. package/docs/content/ActionList2.mdx +358 -0
  10. package/docs/content/StateLabel.md +5 -4
  11. package/docs/content/getting-started.md +1 -1
  12. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +17 -0
  13. package/lib/ActionList/Divider.jsx +29 -0
  14. package/lib/ActionList/Group.jsx +23 -0
  15. package/lib/ActionList/Header.jsx +66 -0
  16. package/lib/ActionList/Item.js +28 -19
  17. package/lib/ActionList/Item.jsx +311 -0
  18. package/lib/ActionList/List.jsx +138 -0
  19. package/lib/ActionList/index.js +12 -23
  20. package/lib/ActionList2/Description.d.ts +12 -0
  21. package/lib/ActionList2/Description.js +57 -0
  22. package/lib/ActionList2/Description.jsx +29 -0
  23. package/lib/ActionList2/Divider.d.ts +5 -0
  24. package/lib/ActionList2/Divider.js +35 -0
  25. package/lib/ActionList2/Divider.jsx +22 -0
  26. package/lib/ActionList2/Group.d.ts +11 -0
  27. package/lib/ActionList2/Group.js +57 -0
  28. package/lib/ActionList2/Group.jsx +25 -0
  29. package/lib/ActionList2/Header.d.ts +26 -0
  30. package/lib/ActionList2/Header.js +55 -0
  31. package/lib/ActionList2/Header.jsx +36 -0
  32. package/lib/ActionList2/Item.d.ts +63 -0
  33. package/lib/ActionList2/Item.js +242 -0
  34. package/lib/ActionList2/Item.jsx +174 -0
  35. package/lib/ActionList2/LinkItem.d.ts +17 -0
  36. package/lib/ActionList2/LinkItem.js +57 -0
  37. package/lib/ActionList2/LinkItem.jsx +28 -0
  38. package/lib/ActionList2/List.d.ts +26 -0
  39. package/lib/ActionList2/List.js +59 -0
  40. package/lib/ActionList2/List.jsx +41 -0
  41. package/lib/ActionList2/Selection.d.ts +5 -0
  42. package/lib/ActionList2/Selection.js +84 -0
  43. package/lib/ActionList2/Selection.jsx +50 -0
  44. package/lib/ActionList2/Visuals.d.ts +9 -0
  45. package/lib/ActionList2/Visuals.js +90 -0
  46. package/lib/ActionList2/Visuals.jsx +48 -0
  47. package/lib/ActionList2/index.d.ts +36 -0
  48. package/lib/ActionList2/index.js +29 -0
  49. package/lib/ActionMenu.jsx +73 -0
  50. package/lib/AnchoredOverlay/AnchoredOverlay.jsx +100 -0
  51. package/lib/AnchoredOverlay/index.js +4 -12
  52. package/lib/Autocomplete/Autocomplete.d.ts +28 -28
  53. package/lib/Autocomplete/Autocomplete.jsx +100 -0
  54. package/lib/Autocomplete/AutocompleteContext.jsx +5 -0
  55. package/lib/Autocomplete/AutocompleteInput.d.ts +28 -28
  56. package/lib/Autocomplete/AutocompleteInput.jsx +113 -0
  57. package/lib/Autocomplete/AutocompleteMenu.jsx +190 -0
  58. package/lib/Autocomplete/AutocompleteOverlay.jsx +55 -0
  59. package/lib/Autocomplete/index.js +7 -14
  60. package/lib/Avatar.jsx +34 -0
  61. package/lib/AvatarPair.jsx +29 -0
  62. package/lib/AvatarStack.jsx +151 -0
  63. package/lib/BaseStyles.jsx +65 -0
  64. package/lib/BorderBox.jsx +18 -0
  65. package/lib/Box.jsx +10 -0
  66. package/lib/BranchName.jsx +20 -0
  67. package/lib/Breadcrumbs.jsx +74 -0
  68. package/lib/Button/Button.d.ts +25 -25
  69. package/lib/Button/Button.jsx +60 -0
  70. package/lib/Button/ButtonBase.jsx +36 -0
  71. package/lib/Button/ButtonClose.d.ts +45 -45
  72. package/lib/Button/ButtonClose.jsx +55 -0
  73. package/lib/Button/ButtonDanger.d.ts +25 -25
  74. package/lib/Button/ButtonDanger.jsx +63 -0
  75. package/lib/Button/ButtonGroup.jsx +55 -0
  76. package/lib/Button/ButtonInvisible.d.ts +25 -25
  77. package/lib/Button/ButtonInvisible.jsx +52 -0
  78. package/lib/Button/ButtonOutline.d.ts +25 -25
  79. package/lib/Button/ButtonOutline.jsx +63 -0
  80. package/lib/Button/ButtonPrimary.d.ts +25 -25
  81. package/lib/Button/ButtonPrimary.jsx +62 -0
  82. package/lib/Button/ButtonStyles.jsx +37 -0
  83. package/lib/Button/ButtonTableList.jsx +49 -0
  84. package/lib/Button/index.js +21 -70
  85. package/lib/Caret.jsx +93 -0
  86. package/lib/CircleBadge.jsx +43 -0
  87. package/lib/CircleOcticon.d.ts +42 -42
  88. package/lib/CircleOcticon.jsx +21 -0
  89. package/lib/CounterLabel.jsx +44 -0
  90. package/lib/Details.jsx +21 -0
  91. package/lib/Dialog/ConfirmationDialog.jsx +146 -0
  92. package/lib/Dialog/Dialog.js +1 -0
  93. package/lib/Dialog/Dialog.jsx +273 -0
  94. package/lib/Dialog.d.ts +45 -45
  95. package/lib/Dialog.jsx +131 -0
  96. package/lib/Dropdown.d.ts +176 -176
  97. package/lib/Dropdown.jsx +134 -0
  98. package/lib/DropdownMenu/DropdownButton.d.ts +46 -46
  99. package/lib/DropdownMenu/DropdownButton.jsx +14 -0
  100. package/lib/DropdownMenu/DropdownMenu.jsx +70 -0
  101. package/lib/DropdownMenu/index.js +6 -20
  102. package/lib/DropdownStyles.js +18 -26
  103. package/lib/FilterList.d.ts +42 -42
  104. package/lib/FilterList.jsx +63 -0
  105. package/lib/FilteredActionList/FilteredActionList.jsx +100 -0
  106. package/lib/FilteredActionList/index.js +4 -12
  107. package/lib/FilteredSearch.jsx +29 -0
  108. package/lib/Flash.jsx +70 -0
  109. package/lib/Flex.jsx +15 -0
  110. package/lib/FormGroup.jsx +25 -0
  111. package/lib/Grid.jsx +15 -0
  112. package/lib/Header.jsx +90 -0
  113. package/lib/Heading.jsx +21 -0
  114. package/lib/Label.jsx +84 -0
  115. package/lib/LabelGroup.jsx +19 -0
  116. package/lib/Link.jsx +38 -0
  117. package/lib/NewButton/button-counter.d.ts +6 -0
  118. package/lib/NewButton/button-counter.js +31 -0
  119. package/lib/NewButton/button-counter.jsx +14 -0
  120. package/lib/NewButton/button.d.ts +13 -0
  121. package/lib/NewButton/button.js +316 -0
  122. package/lib/NewButton/button.jsx +278 -0
  123. package/lib/NewButton/index.d.ts +14 -0
  124. package/lib/NewButton/index.js +8 -0
  125. package/lib/NewButton/types.d.ts +32 -0
  126. package/lib/NewButton/types.js +2 -0
  127. package/lib/Overlay.jsx +156 -0
  128. package/lib/Pagehead.jsx +18 -0
  129. package/lib/Pagination/Pagination.jsx +163 -0
  130. package/lib/Pagination/index.js +6 -12
  131. package/lib/Pagination/model.jsx +174 -0
  132. package/lib/PointerBox.jsx +25 -0
  133. package/lib/Popover.jsx +210 -0
  134. package/lib/Portal/Portal.jsx +79 -0
  135. package/lib/Portal/index.js +5 -16
  136. package/lib/Position.d.ts +4 -4
  137. package/lib/Position.jsx +46 -0
  138. package/lib/ProgressBar.jsx +39 -0
  139. package/lib/SelectMenu/SelectMenu.d.ts +246 -246
  140. package/lib/SelectMenu/SelectMenu.jsx +114 -0
  141. package/lib/SelectMenu/SelectMenuContext.jsx +5 -0
  142. package/lib/SelectMenu/SelectMenuDivider.jsx +43 -0
  143. package/lib/SelectMenu/SelectMenuFilter.jsx +59 -0
  144. package/lib/SelectMenu/SelectMenuFooter.jsx +46 -0
  145. package/lib/SelectMenu/SelectMenuHeader.jsx +44 -0
  146. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  147. package/lib/SelectMenu/SelectMenuItem.jsx +143 -0
  148. package/lib/SelectMenu/SelectMenuList.jsx +60 -0
  149. package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +21 -0
  150. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  151. package/lib/SelectMenu/SelectMenuModal.jsx +119 -0
  152. package/lib/SelectMenu/SelectMenuTab.jsx +93 -0
  153. package/lib/SelectMenu/SelectMenuTabPanel.jsx +43 -0
  154. package/lib/SelectMenu/SelectMenuTabs.jsx +58 -0
  155. package/lib/SelectMenu/hooks/useKeyboardNav.js +80 -96
  156. package/lib/SelectMenu/index.js +7 -14
  157. package/lib/SelectPanel/SelectPanel.jsx +105 -0
  158. package/lib/SelectPanel/index.js +4 -12
  159. package/lib/SideNav.jsx +177 -0
  160. package/lib/Spinner.jsx +35 -0
  161. package/lib/StateLabel.d.ts +1 -1
  162. package/lib/StateLabel.js +6 -1
  163. package/lib/StateLabel.jsx +94 -0
  164. package/lib/StyledOcticon.jsx +20 -0
  165. package/lib/SubNav.jsx +104 -0
  166. package/lib/TabNav.jsx +60 -0
  167. package/lib/Text.jsx +14 -0
  168. package/lib/TextInput.jsx +23 -0
  169. package/lib/TextInputWithTokens.d.ts +28 -28
  170. package/lib/TextInputWithTokens.jsx +218 -0
  171. package/lib/ThemeProvider.jsx +130 -0
  172. package/lib/Timeline.d.ts +43 -43
  173. package/lib/Timeline.jsx +124 -0
  174. package/lib/Token/AvatarToken.d.ts +1 -1
  175. package/lib/Token/AvatarToken.jsx +54 -0
  176. package/lib/Token/IssueLabelToken.d.ts +1 -1
  177. package/lib/Token/IssueLabelToken.jsx +125 -0
  178. package/lib/Token/Token.d.ts +1 -1
  179. package/lib/Token/Token.jsx +103 -0
  180. package/lib/Token/TokenBase.jsx +88 -0
  181. package/lib/Token/_RemoveTokenButton.jsx +108 -0
  182. package/lib/Token/_TokenTextContainer.jsx +49 -0
  183. package/lib/Token/index.js +11 -30
  184. package/lib/Tooltip.jsx +246 -0
  185. package/lib/Truncate.jsx +27 -0
  186. package/lib/UnderlineNav.jsx +90 -0
  187. package/lib/_TextInputWrapper.jsx +120 -0
  188. package/lib/_UnstyledTextInput.jsx +22 -0
  189. package/lib/__tests__/ActionList.test.jsx +49 -0
  190. package/lib/__tests__/ActionList.types.test.jsx +45 -0
  191. package/lib/__tests__/ActionList2.test.d.ts +1 -0
  192. package/lib/__tests__/ActionList2.test.js +53 -0
  193. package/lib/__tests__/ActionList2.test.jsx +46 -0
  194. package/lib/__tests__/ActionMenu.test.jsx +124 -0
  195. package/lib/__tests__/AnchoredOverlay.test.jsx +121 -0
  196. package/lib/__tests__/Autocomplete.test.jsx +299 -0
  197. package/lib/__tests__/Avatar.test.jsx +42 -0
  198. package/lib/__tests__/AvatarStack.test.jsx +43 -0
  199. package/lib/__tests__/BorderBox.test.jsx +36 -0
  200. package/lib/__tests__/Box.test.jsx +41 -0
  201. package/lib/__tests__/BranchName.test.jsx +27 -0
  202. package/lib/__tests__/Breadcrumbs.test.jsx +28 -0
  203. package/lib/__tests__/BreadcrumbsItem.test.jsx +31 -0
  204. package/lib/__tests__/Button.test.jsx +100 -0
  205. package/lib/__tests__/Caret.test.jsx +37 -0
  206. package/lib/__tests__/CircleBadge.test.jsx +55 -0
  207. package/lib/__tests__/CircleOcticon.test.jsx +45 -0
  208. package/lib/__tests__/ConfirmationDialog.test.jsx +119 -0
  209. package/lib/__tests__/CounterLabel.test.jsx +36 -0
  210. package/lib/__tests__/Details.test.jsx +85 -0
  211. package/lib/__tests__/Dialog.test.jsx +139 -0
  212. package/lib/__tests__/Dropdown.test.jsx +49 -0
  213. package/lib/__tests__/DropdownMenu.test.jsx +119 -0
  214. package/lib/__tests__/FilterList.test.jsx +27 -0
  215. package/lib/__tests__/FilterListItem.test.jsx +31 -0
  216. package/lib/__tests__/FilteredSearch.test.jsx +27 -0
  217. package/lib/__tests__/Flash.test.jsx +36 -0
  218. package/lib/__tests__/Flex.test.jsx +51 -0
  219. package/lib/__tests__/FormGroup.test.jsx +36 -0
  220. package/lib/__tests__/Grid.test.jsx +69 -0
  221. package/lib/__tests__/Header.test.jsx +45 -0
  222. package/lib/__tests__/Heading.test.jsx +71 -0
  223. package/lib/__tests__/KeyPaths.types.test.js +5 -8
  224. package/lib/__tests__/Label.test.jsx +33 -0
  225. package/lib/__tests__/LabelGroup.test.jsx +29 -0
  226. package/lib/__tests__/Link.test.jsx +43 -0
  227. package/lib/__tests__/Merge.types.test.js +13 -19
  228. package/lib/__tests__/NewButton.test.d.ts +1 -0
  229. package/lib/__tests__/NewButton.test.js +95 -0
  230. package/lib/__tests__/NewButton.test.jsx +61 -0
  231. package/lib/__tests__/Overlay.test.jsx +105 -0
  232. package/lib/__tests__/Pagehead.test.jsx +25 -0
  233. package/lib/__tests__/Pagination/Pagination.test.jsx +32 -0
  234. package/lib/__tests__/Pagination/PaginationModel.test.jsx +118 -0
  235. package/lib/__tests__/PointerBox.test.jsx +33 -0
  236. package/lib/__tests__/Popover.test.jsx +58 -0
  237. package/lib/__tests__/Portal.test.jsx +102 -0
  238. package/lib/__tests__/Position.test.jsx +96 -0
  239. package/lib/__tests__/ProgressBar.test.jsx +38 -0
  240. package/lib/__tests__/SelectMenu.test.jsx +120 -0
  241. package/lib/__tests__/SelectPanel.test.jsx +48 -0
  242. package/lib/__tests__/SideNav.test.jsx +55 -0
  243. package/lib/__tests__/Spinner.test.jsx +41 -0
  244. package/lib/__tests__/StateLabel.test.jsx +46 -0
  245. package/lib/__tests__/StyledOcticon.test.jsx +28 -0
  246. package/lib/__tests__/SubNav.test.jsx +47 -0
  247. package/lib/__tests__/SubNavLink.test.jsx +31 -0
  248. package/lib/__tests__/TabNav.test.jsx +32 -0
  249. package/lib/__tests__/Text.test.jsx +71 -0
  250. package/lib/__tests__/TextInput.test.jsx +45 -0
  251. package/lib/__tests__/TextInputWithTokens.test.jsx +302 -0
  252. package/lib/__tests__/ThemeProvider.test.jsx +314 -0
  253. package/lib/__tests__/Timeline.test.jsx +51 -0
  254. package/lib/__tests__/Token.test.jsx +93 -0
  255. package/lib/__tests__/Tooltip.test.jsx +46 -0
  256. package/lib/__tests__/Truncate.test.jsx +41 -0
  257. package/lib/__tests__/UnderlineNav.test.jsx +53 -0
  258. package/lib/__tests__/UnderlineNavLink.test.jsx +31 -0
  259. package/lib/__tests__/behaviors/anchoredPosition.test.js +229 -376
  260. package/lib/__tests__/behaviors/focusTrap.test.jsx +184 -0
  261. package/lib/__tests__/behaviors/focusZone.test.jsx +406 -0
  262. package/lib/__tests__/behaviors/iterateFocusableElements.test.jsx +58 -0
  263. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +145 -216
  264. package/lib/__tests__/filterObject.test.js +48 -27
  265. package/lib/__tests__/hooks/useAnchoredPosition.test.jsx +29 -0
  266. package/lib/__tests__/hooks/useOnEscapePress.test.jsx +19 -0
  267. package/lib/__tests__/hooks/useOnOutsideClick.test.jsx +63 -0
  268. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.jsx +61 -0
  269. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.jsx +56 -0
  270. package/lib/__tests__/theme.test.js +33 -34
  271. package/lib/__tests__/themeGet.test.js +12 -23
  272. package/lib/__tests__/useSafeTimeout.test.jsx +36 -0
  273. package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
  274. package/lib/__tests__/utils/createSlots.test.js +75 -0
  275. package/lib/__tests__/utils/createSlots.test.jsx +57 -0
  276. package/lib/behaviors/anchoredPosition.js +205 -234
  277. package/lib/behaviors/focusTrap.js +121 -157
  278. package/lib/behaviors/focusZone.js +434 -509
  279. package/lib/behaviors/scrollIntoViewingArea.js +18 -35
  280. package/lib/constants.js +39 -43
  281. package/lib/drafts.d.ts +8 -0
  282. package/lib/drafts.js +21 -0
  283. package/lib/hooks/index.js +16 -60
  284. package/lib/hooks/useAnchoredPosition.js +32 -40
  285. package/lib/hooks/useCombinedRefs.js +32 -36
  286. package/lib/hooks/useDetails.jsx +39 -0
  287. package/lib/hooks/useDialog.js +72 -96
  288. package/lib/hooks/useFocusTrap.js +43 -60
  289. package/lib/hooks/useFocusZone.js +54 -50
  290. package/lib/hooks/useOnEscapePress.js +25 -36
  291. package/lib/hooks/useOnOutsideClick.jsx +61 -0
  292. package/lib/hooks/useOpenAndCloseFocus.js +22 -34
  293. package/lib/hooks/useOverlay.jsx +15 -0
  294. package/lib/hooks/useProvidedRefOrCreate.js +10 -14
  295. package/lib/hooks/useProvidedStateOrCreate.js +13 -16
  296. package/lib/hooks/useRenderForcingRef.js +13 -17
  297. package/lib/hooks/useResizeObserver.js +15 -18
  298. package/lib/hooks/useSafeTimeout.js +22 -30
  299. package/lib/hooks/useScrollFlash.js +16 -23
  300. package/lib/index.d.ts +2 -0
  301. package/lib/index.js +163 -636
  302. package/lib/polyfills/eventListenerSignal.js +37 -45
  303. package/lib/stories/ActionList2.stories.js +908 -0
  304. package/lib/stories/NewButton.stories.js +230 -0
  305. package/lib/sx.d.ts +2 -0
  306. package/lib/sx.js +10 -14
  307. package/lib/theme-preval.js +65 -2945
  308. package/lib/theme.js +3 -12
  309. package/lib/utils/create-slots.d.ts +17 -0
  310. package/lib/utils/create-slots.js +105 -0
  311. package/lib/utils/create-slots.jsx +65 -0
  312. package/lib/utils/deprecate.jsx +59 -0
  313. package/lib/utils/isNumeric.jsx +7 -0
  314. package/lib/utils/iterateFocusableElements.js +63 -85
  315. package/lib/utils/ssr.jsx +6 -0
  316. package/lib/utils/test-deprecations.jsx +20 -0
  317. package/lib/utils/test-helpers.jsx +8 -0
  318. package/lib/utils/test-matchers.jsx +100 -0
  319. package/lib/utils/testing.d.ts +14 -1
  320. package/lib/utils/testing.jsx +206 -0
  321. package/lib/utils/theme.js +33 -47
  322. package/lib/utils/types/AriaRole.js +2 -1
  323. package/lib/utils/types/ComponentProps.js +2 -1
  324. package/lib/utils/types/Flatten.js +2 -1
  325. package/lib/utils/types/KeyPaths.js +2 -1
  326. package/lib/utils/types/MandateProps.js +16 -1
  327. package/lib/utils/types/Merge.js +2 -1
  328. package/lib/utils/types/index.js +16 -69
  329. package/lib/utils/uniqueId.js +5 -8
  330. package/lib/utils/use-force-update.d.ts +1 -0
  331. package/lib/utils/use-force-update.js +13 -0
  332. package/lib/utils/useIsomorphicLayoutEffect.js +8 -11
  333. package/lib/utils/userAgent.js +8 -12
  334. package/lib-esm/ActionList/Item.js +28 -19
  335. package/lib-esm/ActionList2/Description.d.ts +12 -0
  336. package/lib-esm/ActionList2/Description.js +41 -0
  337. package/lib-esm/ActionList2/Divider.d.ts +5 -0
  338. package/lib-esm/ActionList2/Divider.js +23 -0
  339. package/lib-esm/ActionList2/Group.d.ts +11 -0
  340. package/lib-esm/ActionList2/Group.js +40 -0
  341. package/lib-esm/ActionList2/Header.d.ts +26 -0
  342. package/lib-esm/ActionList2/Header.js +44 -0
  343. package/lib-esm/ActionList2/Item.d.ts +63 -0
  344. package/lib-esm/ActionList2/Item.js +208 -0
  345. package/lib-esm/ActionList2/LinkItem.d.ts +17 -0
  346. package/lib-esm/ActionList2/LinkItem.js +43 -0
  347. package/lib-esm/ActionList2/List.d.ts +26 -0
  348. package/lib-esm/ActionList2/List.js +37 -0
  349. package/lib-esm/ActionList2/Selection.d.ts +5 -0
  350. package/lib-esm/ActionList2/Selection.js +66 -0
  351. package/lib-esm/ActionList2/Visuals.d.ts +9 -0
  352. package/lib-esm/ActionList2/Visuals.js +68 -0
  353. package/lib-esm/ActionList2/index.d.ts +36 -0
  354. package/lib-esm/ActionList2/index.js +33 -0
  355. package/lib-esm/Autocomplete/Autocomplete.d.ts +28 -28
  356. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +28 -28
  357. package/lib-esm/Button/Button.d.ts +25 -25
  358. package/lib-esm/Button/ButtonClose.d.ts +45 -45
  359. package/lib-esm/Button/ButtonDanger.d.ts +25 -25
  360. package/lib-esm/Button/ButtonInvisible.d.ts +25 -25
  361. package/lib-esm/Button/ButtonOutline.d.ts +25 -25
  362. package/lib-esm/Button/ButtonPrimary.d.ts +25 -25
  363. package/lib-esm/CircleOcticon.d.ts +42 -42
  364. package/lib-esm/Dialog/Dialog.js +1 -0
  365. package/lib-esm/Dialog.d.ts +45 -45
  366. package/lib-esm/Dropdown.d.ts +176 -176
  367. package/lib-esm/DropdownMenu/DropdownButton.d.ts +46 -46
  368. package/lib-esm/FilterList.d.ts +42 -42
  369. package/lib-esm/NewButton/button-counter.d.ts +6 -0
  370. package/lib-esm/NewButton/button-counter.js +18 -0
  371. package/lib-esm/NewButton/button.d.ts +13 -0
  372. package/lib-esm/NewButton/button.js +298 -0
  373. package/lib-esm/NewButton/index.d.ts +14 -0
  374. package/lib-esm/NewButton/index.js +5 -0
  375. package/lib-esm/NewButton/types.d.ts +32 -0
  376. package/lib-esm/NewButton/types.js +1 -0
  377. package/lib-esm/Position.d.ts +4 -4
  378. package/lib-esm/SelectMenu/SelectMenu.d.ts +246 -246
  379. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  380. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  381. package/lib-esm/StateLabel.d.ts +1 -1
  382. package/lib-esm/StateLabel.js +7 -2
  383. package/lib-esm/TextInputWithTokens.d.ts +28 -28
  384. package/lib-esm/Timeline.d.ts +43 -43
  385. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  386. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  387. package/lib-esm/Token/Token.d.ts +1 -1
  388. package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
  389. package/lib-esm/__tests__/ActionList2.test.js +41 -0
  390. package/lib-esm/__tests__/NewButton.test.d.ts +1 -0
  391. package/lib-esm/__tests__/NewButton.test.js +84 -0
  392. package/lib-esm/__tests__/utils/createSlots.test.d.ts +1 -0
  393. package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
  394. package/lib-esm/drafts.d.ts +8 -0
  395. package/lib-esm/drafts.js +9 -0
  396. package/lib-esm/index.d.ts +2 -0
  397. package/lib-esm/index.js +1 -0
  398. package/lib-esm/stories/ActionList2.stories.js +796 -0
  399. package/lib-esm/stories/NewButton.stories.js +178 -0
  400. package/lib-esm/sx.d.ts +2 -0
  401. package/lib-esm/sx.js +3 -1
  402. package/lib-esm/theme-preval.js +81 -2
  403. package/lib-esm/utils/create-slots.d.ts +17 -0
  404. package/lib-esm/utils/create-slots.js +84 -0
  405. package/lib-esm/utils/testing.d.ts +14 -1
  406. package/lib-esm/utils/use-force-update.d.ts +1 -0
  407. package/lib-esm/utils/use-force-update.js +6 -0
  408. package/package-lock.json +153 -14
  409. package/package.json +7 -4
  410. package/script/build +1 -1
  411. package/src/ActionList/Item.tsx +32 -19
  412. package/src/ActionList2/Description.tsx +52 -0
  413. package/src/ActionList2/Divider.tsx +24 -0
  414. package/src/ActionList2/Group.tsx +34 -0
  415. package/src/ActionList2/Header.tsx +58 -0
  416. package/src/ActionList2/Item.tsx +246 -0
  417. package/src/ActionList2/LinkItem.tsx +49 -0
  418. package/src/ActionList2/List.tsx +55 -0
  419. package/src/ActionList2/Selection.tsx +60 -0
  420. package/src/ActionList2/Visuals.tsx +76 -0
  421. package/src/ActionList2/index.ts +39 -0
  422. package/src/Dialog/Dialog.tsx +1 -0
  423. package/src/NewButton/button-counter.tsx +15 -0
  424. package/src/NewButton/button.tsx +279 -0
  425. package/src/NewButton/index.ts +10 -0
  426. package/src/NewButton/types.ts +36 -0
  427. package/src/StateLabel.tsx +14 -2
  428. package/src/__tests__/ActionList2.test.tsx +47 -0
  429. package/src/__tests__/NewButton.test.tsx +70 -0
  430. package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
  431. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +722 -255
  432. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +1 -0
  433. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +1 -0
  434. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +1 -0
  435. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +1 -0
  436. package/src/__tests__/__snapshots__/NewButton.test.tsx.snap +300 -0
  437. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +4 -0
  438. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +1 -0
  439. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +13 -6
  440. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +1 -0
  441. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +66 -0
  442. package/src/__tests__/__snapshots__/Token.test.tsx.snap +17 -0
  443. package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
  444. package/src/__tests__/utils/createSlots.test.tsx +74 -0
  445. package/src/drafts.ts +10 -0
  446. package/src/index.ts +2 -0
  447. package/src/stories/ActionList2.stories.tsx +1291 -0
  448. package/src/stories/NewButton.stories.tsx +201 -0
  449. package/src/sx.ts +3 -0
  450. package/src/theme-preval.js +1 -0
  451. package/src/utils/create-slots.tsx +96 -0
  452. package/src/utils/use-force-update.ts +7 -0
  453. package/stats.html +1 -1
  454. package/tsconfig.base.json +20 -0
  455. package/tsconfig.build.json +2 -2
  456. 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,95 @@
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
+ var _octiconsReact = require("@primer/octicons-react");
16
+
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+
19
+ expect.extend(_jestAxe.toHaveNoViolations); // eslint-disable-next-line @typescript-eslint/no-empty-function
20
+
21
+ function noop() {}
22
+
23
+ describe('Button', () => {
24
+ (0, _testing.behavesAsComponent)({
25
+ Component: _NewButton.NewButton
26
+ });
27
+ it('renders a <button>', () => {
28
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, null, "Default")).type).toEqual('button');
29
+ });
30
+ it('should have no axe violations', async () => {
31
+ const {
32
+ container
33
+ } = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, null, "Click here"));
34
+ const results = await (0, _jestAxe.axe)(container);
35
+ expect(results).toHaveNoViolations();
36
+ (0, _react2.cleanup)();
37
+ });
38
+ it('preserves "onClick" prop', () => {
39
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
40
+ onClick: noop
41
+ }, "Noop")).props.onClick).toEqual(noop);
42
+ });
43
+ it('respects width props', () => {
44
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
45
+ sx: {
46
+ width: 200
47
+ }
48
+ }, "Block"))).toHaveStyleRule('width', '200px');
49
+ });
50
+ it('respects the "disabled" prop', () => {
51
+ const item = (0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
52
+ disabled: true
53
+ }, " Disabled"));
54
+ expect(item.props.disabled).toEqual(true);
55
+ expect(item).toMatchSnapshot();
56
+ });
57
+ it('respects the "variant" prop', () => {
58
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
59
+ size: "small"
60
+ }, "Smol"))).toHaveStyleRule('font-size', '12px');
61
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
62
+ size: "large"
63
+ }, "Large"))).toHaveStyleRule('font-size', '16px');
64
+ });
65
+ it('respects the "fontSize" prop over the "variant" prop', () => {
66
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
67
+ size: "small",
68
+ sx: {
69
+ fontSize: 20
70
+ }
71
+ }, "Big Smol"))).toHaveStyleRule('font-size', '20px');
72
+ });
73
+ it('styles primary button appropriately', () => {
74
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
75
+ variant: "primary"
76
+ }, "Primary"))).toHaveStyleRule('background-color', '#2da44e');
77
+ });
78
+ it('styles invisible button appropriately', () => {
79
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
80
+ variant: "invisible"
81
+ }, "Invisible"))).toHaveStyleRule('background-color', 'transparent');
82
+ });
83
+ it('styles danger button appropriately', () => {
84
+ expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
85
+ variant: "danger"
86
+ }, "Danger"))).toHaveStyleRule('background-color', '#f6f8fa');
87
+ });
88
+ it('styles icon only button to make it a square', () => {
89
+ const IconOnlyButton = (0, _testing.render)( /*#__PURE__*/_react.default.createElement(_NewButton.NewButton, {
90
+ icon: _octiconsReact.SearchIcon
91
+ }, "Search icon only button"));
92
+ expect(IconOnlyButton).toHaveStyleRule('padding-right', '7px');
93
+ expect(IconOnlyButton).toMatchSnapshot();
94
+ });
95
+ });
@@ -0,0 +1,61 @@
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
+ const octicons_react_1 = require("@primer/octicons-react");
13
+ expect.extend(jest_axe_1.toHaveNoViolations);
14
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
15
+ function noop() { }
16
+ describe('Button', () => {
17
+ testing_1.behavesAsComponent({ Component: NewButton_1.NewButton });
18
+ it('renders a <button>', () => {
19
+ expect(testing_1.render(<NewButton_1.NewButton>Default</NewButton_1.NewButton>).type).toEqual('button');
20
+ });
21
+ it('should have no axe violations', async () => {
22
+ const { container } = react_2.render(<NewButton_1.NewButton>Click here</NewButton_1.NewButton>);
23
+ const results = await jest_axe_1.axe(container);
24
+ expect(results).toHaveNoViolations();
25
+ react_2.cleanup();
26
+ });
27
+ it('preserves "onClick" prop', () => {
28
+ expect(testing_1.render(<NewButton_1.NewButton onClick={noop}>Noop</NewButton_1.NewButton>).props.onClick).toEqual(noop);
29
+ });
30
+ it('respects width props', () => {
31
+ expect(testing_1.render(<NewButton_1.NewButton sx={{ width: 200 }}>Block</NewButton_1.NewButton>)).toHaveStyleRule('width', '200px');
32
+ });
33
+ it('respects the "disabled" prop', () => {
34
+ const item = testing_1.render(<NewButton_1.NewButton disabled> Disabled</NewButton_1.NewButton>);
35
+ expect(item.props.disabled).toEqual(true);
36
+ expect(item).toMatchSnapshot();
37
+ });
38
+ it('respects the "variant" prop', () => {
39
+ expect(testing_1.render(<NewButton_1.NewButton size="small">Smol</NewButton_1.NewButton>)).toHaveStyleRule('font-size', '12px');
40
+ expect(testing_1.render(<NewButton_1.NewButton size="large">Large</NewButton_1.NewButton>)).toHaveStyleRule('font-size', '16px');
41
+ });
42
+ it('respects the "fontSize" prop over the "variant" prop', () => {
43
+ expect(testing_1.render(<NewButton_1.NewButton size="small" sx={{ fontSize: 20 }}>
44
+ Big Smol
45
+ </NewButton_1.NewButton>)).toHaveStyleRule('font-size', '20px');
46
+ });
47
+ it('styles primary button appropriately', () => {
48
+ expect(testing_1.render(<NewButton_1.NewButton variant="primary">Primary</NewButton_1.NewButton>)).toHaveStyleRule('background-color', '#2da44e');
49
+ });
50
+ it('styles invisible button appropriately', () => {
51
+ expect(testing_1.render(<NewButton_1.NewButton variant="invisible">Invisible</NewButton_1.NewButton>)).toHaveStyleRule('background-color', 'transparent');
52
+ });
53
+ it('styles danger button appropriately', () => {
54
+ expect(testing_1.render(<NewButton_1.NewButton variant="danger">Danger</NewButton_1.NewButton>)).toHaveStyleRule('background-color', '#f6f8fa');
55
+ });
56
+ it('styles icon only button to make it a square', () => {
57
+ const IconOnlyButton = testing_1.render(<NewButton_1.NewButton icon={octicons_react_1.SearchIcon}>Search icon only button</NewButton_1.NewButton>);
58
+ expect(IconOnlyButton).toHaveStyleRule('padding-right', '7px');
59
+ expect(IconOnlyButton).toMatchSnapshot();
60
+ });
61
+ });
@@ -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
+ });