@primer/components 31.2.0-rc.6afeaa37 → 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 (375) 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 +4 -0
  5. package/dist/browser.esm.js +209 -209
  6. package/dist/browser.esm.js.map +1 -1
  7. package/dist/browser.umd.js +195 -195
  8. package/dist/browser.umd.js.map +1 -1
  9. package/docs/content/ActionList2.mdx +14 -8
  10. package/docs/content/StateLabel.md +5 -4
  11. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +2 -2
  12. package/lib/ActionList/Divider.jsx +29 -0
  13. package/lib/ActionList/Group.jsx +23 -0
  14. package/lib/ActionList/Header.jsx +66 -0
  15. package/lib/ActionList/Item.jsx +301 -0
  16. package/lib/ActionList/List.jsx +138 -0
  17. package/lib/ActionList/index.js +12 -23
  18. package/lib/ActionList2/Description.jsx +30 -0
  19. package/lib/ActionList2/Divider.jsx +22 -0
  20. package/lib/ActionList2/Group.jsx +25 -0
  21. package/lib/ActionList2/Header.jsx +36 -0
  22. package/lib/ActionList2/Item.jsx +174 -0
  23. package/lib/ActionList2/LinkItem.jsx +28 -0
  24. package/lib/ActionList2/List.jsx +41 -0
  25. package/lib/ActionList2/Selection.jsx +36 -0
  26. package/lib/ActionList2/Visuals.jsx +48 -0
  27. package/lib/ActionList2/index.js +23 -41
  28. package/lib/ActionMenu.jsx +73 -0
  29. package/lib/AnchoredOverlay/AnchoredOverlay.jsx +100 -0
  30. package/lib/AnchoredOverlay/index.js +4 -12
  31. package/lib/Autocomplete/Autocomplete.d.ts +28 -28
  32. package/lib/Autocomplete/Autocomplete.jsx +100 -0
  33. package/lib/Autocomplete/AutocompleteContext.jsx +5 -0
  34. package/lib/Autocomplete/AutocompleteInput.d.ts +28 -28
  35. package/lib/Autocomplete/AutocompleteInput.jsx +113 -0
  36. package/lib/Autocomplete/AutocompleteMenu.jsx +190 -0
  37. package/lib/Autocomplete/AutocompleteOverlay.jsx +55 -0
  38. package/lib/Autocomplete/index.js +7 -14
  39. package/lib/Avatar.jsx +34 -0
  40. package/lib/AvatarPair.jsx +29 -0
  41. package/lib/AvatarStack.jsx +151 -0
  42. package/lib/BaseStyles.jsx +65 -0
  43. package/lib/BorderBox.jsx +18 -0
  44. package/lib/Box.jsx +10 -0
  45. package/lib/BranchName.jsx +20 -0
  46. package/lib/Breadcrumbs.jsx +74 -0
  47. package/lib/Button/Button.d.ts +25 -25
  48. package/lib/Button/Button.jsx +60 -0
  49. package/lib/Button/ButtonBase.jsx +36 -0
  50. package/lib/Button/ButtonClose.d.ts +45 -45
  51. package/lib/Button/ButtonClose.jsx +55 -0
  52. package/lib/Button/ButtonDanger.d.ts +25 -25
  53. package/lib/Button/ButtonDanger.jsx +63 -0
  54. package/lib/Button/ButtonGroup.jsx +55 -0
  55. package/lib/Button/ButtonInvisible.d.ts +25 -25
  56. package/lib/Button/ButtonInvisible.jsx +52 -0
  57. package/lib/Button/ButtonOutline.d.ts +25 -25
  58. package/lib/Button/ButtonOutline.jsx +63 -0
  59. package/lib/Button/ButtonPrimary.d.ts +25 -25
  60. package/lib/Button/ButtonPrimary.jsx +62 -0
  61. package/lib/Button/ButtonStyles.jsx +37 -0
  62. package/lib/Button/ButtonTableList.jsx +49 -0
  63. package/lib/Button/index.js +21 -70
  64. package/lib/Caret.jsx +93 -0
  65. package/lib/CircleBadge.jsx +43 -0
  66. package/lib/CircleOcticon.d.ts +42 -42
  67. package/lib/CircleOcticon.jsx +21 -0
  68. package/lib/CounterLabel.jsx +44 -0
  69. package/lib/Details.jsx +21 -0
  70. package/lib/Dialog/ConfirmationDialog.jsx +146 -0
  71. package/lib/Dialog/Dialog.js +1 -0
  72. package/lib/Dialog/Dialog.jsx +273 -0
  73. package/lib/Dialog.d.ts +45 -45
  74. package/lib/Dialog.jsx +131 -0
  75. package/lib/Dropdown.d.ts +176 -176
  76. package/lib/Dropdown.jsx +134 -0
  77. package/lib/DropdownMenu/DropdownButton.d.ts +46 -46
  78. package/lib/DropdownMenu/DropdownButton.jsx +14 -0
  79. package/lib/DropdownMenu/DropdownMenu.jsx +70 -0
  80. package/lib/DropdownMenu/index.js +6 -20
  81. package/lib/DropdownStyles.js +18 -26
  82. package/lib/FilterList.d.ts +42 -42
  83. package/lib/FilterList.jsx +63 -0
  84. package/lib/FilteredActionList/FilteredActionList.jsx +100 -0
  85. package/lib/FilteredActionList/index.js +4 -12
  86. package/lib/FilteredSearch.jsx +29 -0
  87. package/lib/Flash.jsx +70 -0
  88. package/lib/Flex.jsx +15 -0
  89. package/lib/FormGroup.jsx +25 -0
  90. package/lib/Grid.jsx +15 -0
  91. package/lib/Header.jsx +90 -0
  92. package/lib/Heading.jsx +21 -0
  93. package/lib/Label.jsx +84 -0
  94. package/lib/LabelGroup.jsx +19 -0
  95. package/lib/Link.jsx +38 -0
  96. package/lib/NewButton/button-counter.d.ts +6 -0
  97. package/lib/NewButton/button-counter.js +31 -0
  98. package/lib/NewButton/button-counter.jsx +14 -0
  99. package/lib/NewButton/button.d.ts +13 -0
  100. package/lib/NewButton/button.js +316 -0
  101. package/lib/NewButton/button.jsx +278 -0
  102. package/lib/NewButton/index.d.ts +14 -0
  103. package/lib/NewButton/index.js +8 -0
  104. package/lib/NewButton/types.d.ts +32 -0
  105. package/lib/NewButton/types.js +2 -0
  106. package/lib/Overlay.jsx +156 -0
  107. package/lib/Pagehead.jsx +18 -0
  108. package/lib/Pagination/Pagination.jsx +163 -0
  109. package/lib/Pagination/index.js +6 -12
  110. package/lib/Pagination/model.jsx +174 -0
  111. package/lib/PointerBox.jsx +25 -0
  112. package/lib/Popover.jsx +210 -0
  113. package/lib/Portal/Portal.jsx +79 -0
  114. package/lib/Portal/index.js +5 -16
  115. package/lib/Position.d.ts +4 -4
  116. package/lib/Position.jsx +46 -0
  117. package/lib/ProgressBar.jsx +39 -0
  118. package/lib/SelectMenu/SelectMenu.d.ts +246 -246
  119. package/lib/SelectMenu/SelectMenu.jsx +114 -0
  120. package/lib/SelectMenu/SelectMenuContext.jsx +5 -0
  121. package/lib/SelectMenu/SelectMenuDivider.jsx +43 -0
  122. package/lib/SelectMenu/SelectMenuFilter.jsx +59 -0
  123. package/lib/SelectMenu/SelectMenuFooter.jsx +46 -0
  124. package/lib/SelectMenu/SelectMenuHeader.jsx +44 -0
  125. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  126. package/lib/SelectMenu/SelectMenuItem.jsx +143 -0
  127. package/lib/SelectMenu/SelectMenuList.jsx +60 -0
  128. package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +21 -0
  129. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  130. package/lib/SelectMenu/SelectMenuModal.jsx +119 -0
  131. package/lib/SelectMenu/SelectMenuTab.jsx +93 -0
  132. package/lib/SelectMenu/SelectMenuTabPanel.jsx +43 -0
  133. package/lib/SelectMenu/SelectMenuTabs.jsx +58 -0
  134. package/lib/SelectMenu/hooks/useKeyboardNav.js +80 -96
  135. package/lib/SelectMenu/index.js +7 -14
  136. package/lib/SelectPanel/SelectPanel.jsx +105 -0
  137. package/lib/SelectPanel/index.js +4 -12
  138. package/lib/SideNav.jsx +177 -0
  139. package/lib/Spinner.jsx +35 -0
  140. package/lib/StateLabel.d.ts +1 -1
  141. package/lib/StateLabel.js +6 -1
  142. package/lib/StateLabel.jsx +94 -0
  143. package/lib/StyledOcticon.jsx +20 -0
  144. package/lib/SubNav.jsx +104 -0
  145. package/lib/TabNav.jsx +60 -0
  146. package/lib/Text.jsx +14 -0
  147. package/lib/TextInput.jsx +23 -0
  148. package/lib/TextInputWithTokens.d.ts +28 -28
  149. package/lib/TextInputWithTokens.jsx +218 -0
  150. package/lib/ThemeProvider.jsx +130 -0
  151. package/lib/Timeline.d.ts +43 -43
  152. package/lib/Timeline.jsx +124 -0
  153. package/lib/Token/AvatarToken.d.ts +1 -1
  154. package/lib/Token/AvatarToken.jsx +54 -0
  155. package/lib/Token/IssueLabelToken.d.ts +1 -1
  156. package/lib/Token/IssueLabelToken.jsx +125 -0
  157. package/lib/Token/Token.d.ts +1 -1
  158. package/lib/Token/Token.jsx +103 -0
  159. package/lib/Token/TokenBase.jsx +88 -0
  160. package/lib/Token/_RemoveTokenButton.jsx +108 -0
  161. package/lib/Token/_TokenTextContainer.jsx +49 -0
  162. package/lib/Token/index.js +11 -30
  163. package/lib/Tooltip.jsx +246 -0
  164. package/lib/Truncate.jsx +27 -0
  165. package/lib/UnderlineNav.jsx +90 -0
  166. package/lib/_TextInputWrapper.jsx +120 -0
  167. package/lib/_UnstyledTextInput.jsx +22 -0
  168. package/lib/__tests__/ActionList.test.jsx +49 -0
  169. package/lib/__tests__/ActionList.types.test.jsx +45 -0
  170. package/lib/__tests__/ActionList2.test.jsx +46 -0
  171. package/lib/__tests__/ActionMenu.test.jsx +124 -0
  172. package/lib/__tests__/AnchoredOverlay.test.jsx +121 -0
  173. package/lib/__tests__/Autocomplete.test.jsx +299 -0
  174. package/lib/__tests__/Avatar.test.jsx +42 -0
  175. package/lib/__tests__/AvatarStack.test.jsx +43 -0
  176. package/lib/__tests__/BorderBox.test.jsx +36 -0
  177. package/lib/__tests__/Box.test.jsx +41 -0
  178. package/lib/__tests__/BranchName.test.jsx +27 -0
  179. package/lib/__tests__/Breadcrumbs.test.jsx +28 -0
  180. package/lib/__tests__/BreadcrumbsItem.test.jsx +31 -0
  181. package/lib/__tests__/Button.test.jsx +100 -0
  182. package/lib/__tests__/Caret.test.jsx +37 -0
  183. package/lib/__tests__/CircleBadge.test.jsx +55 -0
  184. package/lib/__tests__/CircleOcticon.test.jsx +45 -0
  185. package/lib/__tests__/ConfirmationDialog.test.jsx +119 -0
  186. package/lib/__tests__/CounterLabel.test.jsx +36 -0
  187. package/lib/__tests__/Details.test.jsx +85 -0
  188. package/lib/__tests__/Dialog.test.jsx +139 -0
  189. package/lib/__tests__/Dropdown.test.jsx +49 -0
  190. package/lib/__tests__/DropdownMenu.test.jsx +119 -0
  191. package/lib/__tests__/FilterList.test.jsx +27 -0
  192. package/lib/__tests__/FilterListItem.test.jsx +31 -0
  193. package/lib/__tests__/FilteredSearch.test.jsx +27 -0
  194. package/lib/__tests__/Flash.test.jsx +36 -0
  195. package/lib/__tests__/Flex.test.jsx +51 -0
  196. package/lib/__tests__/FormGroup.test.jsx +36 -0
  197. package/lib/__tests__/Grid.test.jsx +69 -0
  198. package/lib/__tests__/Header.test.jsx +45 -0
  199. package/lib/__tests__/Heading.test.jsx +71 -0
  200. package/lib/__tests__/KeyPaths.types.test.js +5 -8
  201. package/lib/__tests__/Label.test.jsx +33 -0
  202. package/lib/__tests__/LabelGroup.test.jsx +29 -0
  203. package/lib/__tests__/Link.test.jsx +43 -0
  204. package/lib/__tests__/Merge.types.test.js +13 -19
  205. package/lib/__tests__/NewButton.test.d.ts +1 -0
  206. package/lib/__tests__/NewButton.test.js +86 -0
  207. package/lib/__tests__/NewButton.test.jsx +55 -0
  208. package/lib/__tests__/Overlay.test.jsx +105 -0
  209. package/lib/__tests__/Pagehead.test.jsx +25 -0
  210. package/lib/__tests__/Pagination/Pagination.test.jsx +32 -0
  211. package/lib/__tests__/Pagination/PaginationModel.test.jsx +118 -0
  212. package/lib/__tests__/PointerBox.test.jsx +33 -0
  213. package/lib/__tests__/Popover.test.jsx +58 -0
  214. package/lib/__tests__/Portal.test.jsx +102 -0
  215. package/lib/__tests__/Position.test.jsx +96 -0
  216. package/lib/__tests__/ProgressBar.test.jsx +38 -0
  217. package/lib/__tests__/SelectMenu.test.jsx +120 -0
  218. package/lib/__tests__/SelectPanel.test.jsx +48 -0
  219. package/lib/__tests__/SideNav.test.jsx +55 -0
  220. package/lib/__tests__/Spinner.test.jsx +41 -0
  221. package/lib/__tests__/StateLabel.test.jsx +46 -0
  222. package/lib/__tests__/StyledOcticon.test.jsx +28 -0
  223. package/lib/__tests__/SubNav.test.jsx +47 -0
  224. package/lib/__tests__/SubNavLink.test.jsx +31 -0
  225. package/lib/__tests__/TabNav.test.jsx +32 -0
  226. package/lib/__tests__/Text.test.jsx +71 -0
  227. package/lib/__tests__/TextInput.test.jsx +45 -0
  228. package/lib/__tests__/TextInputWithTokens.test.jsx +302 -0
  229. package/lib/__tests__/ThemeProvider.test.jsx +314 -0
  230. package/lib/__tests__/Timeline.test.jsx +51 -0
  231. package/lib/__tests__/Token.test.jsx +93 -0
  232. package/lib/__tests__/Tooltip.test.jsx +46 -0
  233. package/lib/__tests__/Truncate.test.jsx +41 -0
  234. package/lib/__tests__/UnderlineNav.test.jsx +53 -0
  235. package/lib/__tests__/UnderlineNavLink.test.jsx +31 -0
  236. package/lib/__tests__/behaviors/anchoredPosition.test.js +229 -376
  237. package/lib/__tests__/behaviors/focusTrap.test.jsx +184 -0
  238. package/lib/__tests__/behaviors/focusZone.test.jsx +406 -0
  239. package/lib/__tests__/behaviors/iterateFocusableElements.test.jsx +58 -0
  240. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +145 -216
  241. package/lib/__tests__/filterObject.test.js +48 -27
  242. package/lib/__tests__/hooks/useAnchoredPosition.test.jsx +29 -0
  243. package/lib/__tests__/hooks/useOnEscapePress.test.jsx +19 -0
  244. package/lib/__tests__/hooks/useOnOutsideClick.test.jsx +63 -0
  245. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.jsx +61 -0
  246. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.jsx +56 -0
  247. package/lib/__tests__/theme.test.js +33 -34
  248. package/lib/__tests__/themeGet.test.js +12 -23
  249. package/lib/__tests__/useSafeTimeout.test.jsx +36 -0
  250. package/lib/__tests__/utils/createSlots.test.jsx +57 -0
  251. package/lib/behaviors/anchoredPosition.js +205 -234
  252. package/lib/behaviors/focusTrap.js +121 -157
  253. package/lib/behaviors/focusZone.js +434 -509
  254. package/lib/behaviors/scrollIntoViewingArea.js +18 -35
  255. package/lib/constants.js +39 -43
  256. package/lib/{unreleased.d.ts → drafts.d.ts} +2 -1
  257. package/lib/drafts.js +21 -0
  258. package/lib/hooks/index.js +16 -60
  259. package/lib/hooks/useAnchoredPosition.js +32 -40
  260. package/lib/hooks/useCombinedRefs.js +32 -36
  261. package/lib/hooks/useDetails.jsx +39 -0
  262. package/lib/hooks/useDialog.js +72 -96
  263. package/lib/hooks/useFocusTrap.js +43 -60
  264. package/lib/hooks/useFocusZone.js +54 -50
  265. package/lib/hooks/useOnEscapePress.js +25 -36
  266. package/lib/hooks/useOnOutsideClick.jsx +61 -0
  267. package/lib/hooks/useOpenAndCloseFocus.js +22 -34
  268. package/lib/hooks/useOverlay.jsx +15 -0
  269. package/lib/hooks/useProvidedRefOrCreate.js +10 -14
  270. package/lib/hooks/useProvidedStateOrCreate.js +13 -16
  271. package/lib/hooks/useRenderForcingRef.js +13 -17
  272. package/lib/hooks/useResizeObserver.js +15 -18
  273. package/lib/hooks/useSafeTimeout.js +22 -30
  274. package/lib/hooks/useScrollFlash.js +16 -23
  275. package/lib/index.d.ts +2 -0
  276. package/lib/index.js +163 -636
  277. package/lib/polyfills/eventListenerSignal.js +37 -45
  278. package/lib/stories/ActionList2.stories.js +3 -2
  279. package/lib/stories/NewButton.stories.js +230 -0
  280. package/lib/sx.js +10 -22
  281. package/lib/theme-preval.js +64 -3023
  282. package/lib/theme.js +3 -12
  283. package/lib/utils/create-slots.jsx +65 -0
  284. package/lib/utils/deprecate.jsx +59 -0
  285. package/lib/utils/isNumeric.jsx +7 -0
  286. package/lib/utils/iterateFocusableElements.js +63 -85
  287. package/lib/utils/ssr.jsx +6 -0
  288. package/lib/utils/test-deprecations.jsx +20 -0
  289. package/lib/utils/test-helpers.jsx +8 -0
  290. package/lib/utils/test-matchers.jsx +100 -0
  291. package/lib/utils/testing.jsx +206 -0
  292. package/lib/utils/theme.js +33 -47
  293. package/lib/utils/types/AriaRole.js +2 -1
  294. package/lib/utils/types/ComponentProps.js +2 -1
  295. package/lib/utils/types/Flatten.js +2 -1
  296. package/lib/utils/types/KeyPaths.js +2 -1
  297. package/lib/utils/types/MandateProps.js +16 -1
  298. package/lib/utils/types/Merge.js +2 -1
  299. package/lib/utils/types/index.js +16 -69
  300. package/lib/utils/uniqueId.js +5 -8
  301. package/lib/utils/use-force-update.js +8 -14
  302. package/lib/utils/useIsomorphicLayoutEffect.js +8 -11
  303. package/lib/utils/userAgent.js +8 -12
  304. package/lib-esm/Autocomplete/Autocomplete.d.ts +28 -28
  305. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +28 -28
  306. package/lib-esm/Button/Button.d.ts +25 -25
  307. package/lib-esm/Button/ButtonClose.d.ts +45 -45
  308. package/lib-esm/Button/ButtonDanger.d.ts +25 -25
  309. package/lib-esm/Button/ButtonInvisible.d.ts +25 -25
  310. package/lib-esm/Button/ButtonOutline.d.ts +25 -25
  311. package/lib-esm/Button/ButtonPrimary.d.ts +25 -25
  312. package/lib-esm/CircleOcticon.d.ts +42 -42
  313. package/lib-esm/Dialog/Dialog.js +1 -0
  314. package/lib-esm/Dialog.d.ts +45 -45
  315. package/lib-esm/Dropdown.d.ts +176 -176
  316. package/lib-esm/DropdownMenu/DropdownButton.d.ts +46 -46
  317. package/lib-esm/FilterList.d.ts +42 -42
  318. package/lib-esm/NewButton/button-counter.d.ts +6 -0
  319. package/lib-esm/NewButton/button-counter.js +18 -0
  320. package/lib-esm/NewButton/button.d.ts +13 -0
  321. package/lib-esm/NewButton/button.js +298 -0
  322. package/lib-esm/NewButton/index.d.ts +14 -0
  323. package/lib-esm/NewButton/index.js +5 -0
  324. package/lib-esm/NewButton/types.d.ts +32 -0
  325. package/lib-esm/NewButton/types.js +1 -0
  326. package/lib-esm/Position.d.ts +4 -4
  327. package/lib-esm/SelectMenu/SelectMenu.d.ts +246 -246
  328. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  329. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  330. package/lib-esm/StateLabel.d.ts +1 -1
  331. package/lib-esm/StateLabel.js +7 -2
  332. package/lib-esm/TextInputWithTokens.d.ts +28 -28
  333. package/lib-esm/Timeline.d.ts +43 -43
  334. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  335. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  336. package/lib-esm/Token/Token.d.ts +1 -1
  337. package/lib-esm/__tests__/NewButton.test.d.ts +1 -0
  338. package/lib-esm/__tests__/NewButton.test.js +76 -0
  339. package/lib-esm/{unreleased.d.ts → drafts.d.ts} +2 -1
  340. package/lib-esm/{unreleased.js → drafts.js} +3 -2
  341. package/lib-esm/index.d.ts +2 -0
  342. package/lib-esm/index.js +1 -0
  343. package/lib-esm/stories/ActionList2.stories.js +3 -3
  344. package/lib-esm/stories/NewButton.stories.js +178 -0
  345. package/package-lock.json +7 -7
  346. package/package.json +4 -3
  347. package/script/build +1 -1
  348. package/src/Dialog/Dialog.tsx +1 -0
  349. package/src/NewButton/button-counter.tsx +15 -0
  350. package/src/NewButton/button.tsx +279 -0
  351. package/src/NewButton/index.ts +10 -0
  352. package/src/NewButton/types.ts +36 -0
  353. package/src/StateLabel.tsx +14 -2
  354. package/src/__tests__/NewButton.test.tsx +64 -0
  355. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +1 -0
  356. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +1 -0
  357. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +1 -0
  358. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +1 -0
  359. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +1 -0
  360. package/src/__tests__/__snapshots__/NewButton.test.tsx.snap +182 -0
  361. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +4 -0
  362. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +1 -0
  363. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +13 -6
  364. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +1 -0
  365. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +66 -0
  366. package/src/__tests__/__snapshots__/Token.test.tsx.snap +17 -0
  367. package/src/{unreleased.ts → drafts.ts} +2 -1
  368. package/src/index.ts +2 -0
  369. package/src/stories/ActionList2.stories.tsx +12 -9
  370. package/src/stories/NewButton.stories.tsx +201 -0
  371. package/stats.html +1 -1
  372. package/tsconfig.base.json +20 -0
  373. package/tsconfig.build.json +2 -2
  374. package/tsconfig.json +4 -17
  375. package/lib/unreleased.js +0 -18
@@ -0,0 +1,37 @@
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 Caret_1 = __importDefault(require("../Caret"));
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('Caret', () => {
14
+ it('renders <svg>', () => {
15
+ expect(testing_1.render(<Caret_1.default />).type).toEqual('svg');
16
+ });
17
+ testing_1.checkExports('Caret', {
18
+ default: Caret_1.default
19
+ });
20
+ it('should have no axe violations', async () => {
21
+ const { container } = react_2.render(<Caret_1.default />);
22
+ const results = await jest_axe_1.axe(container);
23
+ expect(results).toHaveNoViolations();
24
+ react_2.cleanup();
25
+ });
26
+ it('renders cardinal directions', () => {
27
+ for (const location of ['top', 'right', 'bottom', 'left']) {
28
+ expect(testing_1.render(<Caret_1.default location={location}/>)).toMatchSnapshot();
29
+ }
30
+ for (const location of ['top-left', 'top-right', 'bottom-left', 'bottom-right']) {
31
+ expect(testing_1.render(<Caret_1.default location={location}/>)).toMatchSnapshot();
32
+ }
33
+ for (const location of ['left-top', 'left-bottom', 'right-top', 'right-bottom']) {
34
+ expect(testing_1.render(<Caret_1.default location={location}/>)).toMatchSnapshot();
35
+ }
36
+ });
37
+ });
@@ -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 __1 = require("..");
8
+ const octicons_react_1 = require("@primer/octicons-react");
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
+ const imgInput = <img alt="" src="primer.jpg"/>;
15
+ describe('CircleBadge', () => {
16
+ testing_1.behavesAsComponent({
17
+ Component: __1.CircleBadge,
18
+ toRender: () => <__1.CircleBadge>{imgInput}</__1.CircleBadge>
19
+ });
20
+ testing_1.checkExports('CircleBadge', {
21
+ default: __1.CircleBadge
22
+ });
23
+ describe('CircleBadge.Icon', () => {
24
+ testing_1.behavesAsComponent({
25
+ Component: __1.CircleBadge.Icon,
26
+ toRender: () => <__1.CircleBadge.Icon icon={octicons_react_1.CheckIcon}/>
27
+ });
28
+ });
29
+ it('should have no axe violations', async () => {
30
+ const { container } = react_2.render(<__1.CircleBadge variant="large" size={20}/>);
31
+ const results = await jest_axe_1.axe(container);
32
+ expect(results).toHaveNoViolations();
33
+ react_2.cleanup();
34
+ });
35
+ it('respects the inline prop', () => {
36
+ expect(testing_1.render(<__1.CircleBadge inline/>)).toMatchSnapshot();
37
+ });
38
+ it('respects the variant prop', () => {
39
+ expect(testing_1.render(<__1.CircleBadge variant="large"/>)).toMatchSnapshot();
40
+ });
41
+ it('uses the size prop to override the variant prop', () => {
42
+ expect(testing_1.render(<__1.CircleBadge variant="large" size={20}/>)).toMatchSnapshot();
43
+ });
44
+ it('applies title', () => {
45
+ expect(testing_1.render(<__1.CircleBadge as="a" title="primer logo">
46
+ {imgInput}
47
+ </__1.CircleBadge>).props['title']).toEqual('primer logo');
48
+ });
49
+ it('preserves child class names', () => {
50
+ const comp = testing_1.mount(<__1.CircleBadge>
51
+ <img className="primer" alt="" src="primer.jpg"/>
52
+ </__1.CircleBadge>);
53
+ expect(comp.find('img').hasClass('primer')).toEqual(true);
54
+ });
55
+ });
@@ -0,0 +1,45 @@
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 octicons_react_1 = require("@primer/octicons-react");
8
+ const theme_1 = __importDefault(require("../theme"));
9
+ const __1 = require("..");
10
+ const testing_1 = require("../utils/testing");
11
+ const react_2 = require("@testing-library/react");
12
+ const jest_axe_1 = require("jest-axe");
13
+ require("babel-polyfill");
14
+ expect.extend(jest_axe_1.toHaveNoViolations);
15
+ describe('CircleOcticon', () => {
16
+ testing_1.behavesAsComponent({
17
+ Component: __1.CircleOcticon,
18
+ toRender: () => <__1.CircleOcticon icon={octicons_react_1.CheckIcon}/>
19
+ });
20
+ testing_1.checkExports('CircleOcticon', {
21
+ default: __1.CircleOcticon
22
+ });
23
+ it('renders a <div> with width and height', () => {
24
+ const result = testing_1.render(<__1.CircleOcticon icon={octicons_react_1.CheckIcon} size={10}/>);
25
+ expect(result).toHaveStyleRule('width', '10px');
26
+ expect(result).toHaveStyleRule('height', '10px');
27
+ });
28
+ it('should have no axe violations', async () => {
29
+ const { container } = react_2.render(<__1.CircleOcticon icon={octicons_react_1.CheckIcon} size={10}/>);
30
+ const results = await jest_axe_1.axe(container);
31
+ expect(results).toHaveNoViolations();
32
+ react_2.cleanup();
33
+ });
34
+ it('renders {borderRadius: 50%}', () => {
35
+ expect(testing_1.render(<__1.CircleOcticon icon={octicons_react_1.CheckIcon}/>)).toHaveStyleRule('border-radius', '50%');
36
+ });
37
+ it('respects the bg prop', () => {
38
+ expect(testing_1.render(<__1.CircleOcticon icon={octicons_react_1.CheckIcon} bg="danger.subtle"/>)).toHaveStyleRule('background-color', theme_1.default.colorSchemes.light.colors.danger?.subtle);
39
+ });
40
+ it('has a default size', () => {
41
+ const result = testing_1.render(<__1.CircleOcticon icon={octicons_react_1.CheckIcon}/>);
42
+ expect(result).toHaveStyleRule('width', '32px');
43
+ expect(result).toHaveStyleRule('height', '32px');
44
+ });
45
+ });
@@ -0,0 +1,119 @@
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
+ require("babel-polyfill");
26
+ const react_1 = require("@testing-library/react");
27
+ const jest_axe_1 = require("jest-axe");
28
+ const react_2 = __importStar(require("react"));
29
+ const ActionMenu_1 = require("../ActionMenu");
30
+ const BaseStyles_1 = __importDefault(require("../BaseStyles"));
31
+ const Box_1 = __importDefault(require("../Box"));
32
+ const Button_1 = __importDefault(require("../Button/Button"));
33
+ const ConfirmationDialog_1 = require("../Dialog/ConfirmationDialog");
34
+ const theme_1 = __importDefault(require("../theme"));
35
+ const ThemeProvider_1 = require("../ThemeProvider");
36
+ const ssr_1 = require("../utils/ssr");
37
+ const testing_1 = require("../utils/testing");
38
+ expect.extend(jest_axe_1.toHaveNoViolations);
39
+ const Basic = () => {
40
+ const [isOpen, setIsOpen] = react_2.useState(false);
41
+ const buttonRef = react_2.useRef(null);
42
+ const onDialogClose = react_2.useCallback(() => setIsOpen(false), []);
43
+ return (<ThemeProvider_1.ThemeProvider theme={theme_1.default}>
44
+ <ssr_1.SSRProvider>
45
+ <BaseStyles_1.default>
46
+ <Button_1.default ref={buttonRef} onClick={() => setIsOpen(!isOpen)}>
47
+ Show dialog
48
+ </Button_1.default>
49
+ {isOpen && (<ConfirmationDialog_1.ConfirmationDialog title="Confirm" onClose={onDialogClose} cancelButtonContent="Secondary" confirmButtonContent="Primary">
50
+ Lorem ipsum dolor sit Pippin good dog.
51
+ </ConfirmationDialog_1.ConfirmationDialog>)}
52
+ </BaseStyles_1.default>
53
+ </ssr_1.SSRProvider>
54
+ </ThemeProvider_1.ThemeProvider>);
55
+ };
56
+ const ShorthandHookFromActionMenu = () => {
57
+ const confirm = ConfirmationDialog_1.useConfirm();
58
+ const [text, setText] = react_2.useState('Show menu');
59
+ const onButtonClick = react_2.useCallback(async () => {
60
+ if (await confirm({
61
+ title: 'Confirm',
62
+ content: 'Confirm',
63
+ cancelButtonContent: 'Secondary',
64
+ confirmButtonContent: 'Primary'
65
+ })) {
66
+ setText('Confirmed');
67
+ }
68
+ }, [confirm]);
69
+ return (<ThemeProvider_1.ThemeProvider theme={theme_1.default}>
70
+ <ssr_1.SSRProvider>
71
+ <BaseStyles_1.default>
72
+ <Box_1.default display="flex" flexDirection="column" alignItems="flex-start">
73
+ <ActionMenu_1.ActionMenu renderAnchor={props => <Button_1.default {...props}>{text}</Button_1.default>} items={[{ text: 'Show dialog', onAction: onButtonClick }]}/>
74
+ </Box_1.default>
75
+ </BaseStyles_1.default>
76
+ </ssr_1.SSRProvider>
77
+ </ThemeProvider_1.ThemeProvider>);
78
+ };
79
+ describe('ConfirmationDialog', () => {
80
+ testing_1.behavesAsComponent({
81
+ Component: ConfirmationDialog_1.ConfirmationDialog,
82
+ toRender: () => <Basic />,
83
+ options: { skipAs: true, skipSx: true }
84
+ });
85
+ testing_1.checkExports('Dialog/ConfirmationDialog', {
86
+ default: undefined,
87
+ useConfirm: ConfirmationDialog_1.useConfirm,
88
+ ConfirmationDialog: ConfirmationDialog_1.ConfirmationDialog
89
+ });
90
+ it('should have no axe violations', async () => {
91
+ const spy = jest.spyOn(console, 'warn').mockImplementation();
92
+ const { container } = react_1.render(<Basic />);
93
+ spy.mockRestore();
94
+ const results = await jest_axe_1.axe(container);
95
+ expect(results).toHaveNoViolations();
96
+ react_1.cleanup();
97
+ });
98
+ it('focuses the primary action when opened', async () => {
99
+ const { getByText } = react_1.render(<Basic />);
100
+ react_1.act(() => {
101
+ react_1.fireEvent.click(getByText('Show dialog'));
102
+ });
103
+ expect(getByText('Primary')).toEqual(document.activeElement);
104
+ expect(getByText('Secondary')).not.toEqual(document.activeElement);
105
+ react_1.cleanup();
106
+ });
107
+ it('supports nested `focusTrap`s', async () => {
108
+ const { getByText } = react_1.render(<ShorthandHookFromActionMenu />);
109
+ react_1.act(() => {
110
+ react_1.fireEvent.click(getByText('Show menu'));
111
+ });
112
+ react_1.act(() => {
113
+ react_1.fireEvent.click(getByText('Show dialog'));
114
+ });
115
+ expect(getByText('Primary')).toEqual(document.activeElement);
116
+ expect(getByText('Secondary')).not.toEqual(document.activeElement);
117
+ react_1.cleanup();
118
+ });
119
+ });
@@ -0,0 +1,36 @@
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 theme_1 = __importDefault(require("../theme"));
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('CounterLabel', () => {
15
+ testing_1.behavesAsComponent({ Component: __1.CounterLabel });
16
+ testing_1.checkExports('CounterLabel', {
17
+ default: __1.CounterLabel
18
+ });
19
+ it('renders a <span>', () => {
20
+ expect(testing_1.render(<__1.CounterLabel />).type).toEqual('span');
21
+ });
22
+ it('should have no axe violations', async () => {
23
+ const { container } = react_2.render(<__1.CounterLabel />);
24
+ const results = await jest_axe_1.axe(container);
25
+ expect(results).toHaveNoViolations();
26
+ react_2.cleanup();
27
+ });
28
+ it('respects the primary "scheme" prop', () => {
29
+ expect(testing_1.render(<__1.CounterLabel scheme="primary"/>)).toHaveStyleRule('color', theme_1.default.colorSchemes.light.colors.fg?.onEmphasis.trim());
30
+ expect(testing_1.render(<__1.CounterLabel scheme="primary"/>)).toHaveStyleRule('background-color', theme_1.default.colorSchemes.light.colors.neutral?.emphasis.trim());
31
+ });
32
+ it('respects the secondary "scheme" prop', () => {
33
+ expect(testing_1.render(<__1.CounterLabel scheme="secondary"/>)).toHaveStyleRule('color', theme_1.default.colorSchemes.light.colors.fg?.default.trim());
34
+ expect(testing_1.render(<__1.CounterLabel scheme="secondary"/>)).toHaveStyleRule('background-color', theme_1.default.colorSchemes.light.colors.neutral?.muted);
35
+ });
36
+ });
@@ -0,0 +1,85 @@
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('Details', () => {
14
+ testing_1.behavesAsComponent({ Component: __1.Details });
15
+ testing_1.checkExports('Details', {
16
+ default: __1.Details
17
+ });
18
+ it('should have no axe violations', async () => {
19
+ const { container } = react_2.render(<__1.Details />);
20
+ const results = await jest_axe_1.axe(container);
21
+ expect(results).toHaveNoViolations();
22
+ react_2.cleanup();
23
+ });
24
+ it('Toggles when you click outside', () => {
25
+ const Component = () => {
26
+ const { getDetailsProps } = __1.useDetails({ closeOnOutsideClick: true });
27
+ return (<__1.Details {...getDetailsProps()}>
28
+ <summary>hi</summary>
29
+ </__1.Details>);
30
+ };
31
+ const wrapper = testing_1.mount(<Component />);
32
+ document.body.click();
33
+ const dom = wrapper.getDOMNode();
34
+ expect(dom.hasAttribute('open')).toEqual(false);
35
+ wrapper.unmount();
36
+ });
37
+ it('Accurately passes down open state', () => {
38
+ const Component = () => {
39
+ const { getDetailsProps, open } = __1.useDetails({ closeOnOutsideClick: true });
40
+ return (<__1.Details {...getDetailsProps()}>
41
+ <__1.Button as="summary">{open ? 'Open' : 'Closed'}</__1.Button>
42
+ </__1.Details>);
43
+ };
44
+ const wrapper = testing_1.mount(<Component />);
45
+ document.body.click();
46
+ const dom = wrapper.getDOMNode();
47
+ const summary = wrapper.find('summary');
48
+ expect(summary.text()).toEqual('Closed');
49
+ expect(dom.hasAttribute('open')).toEqual(false);
50
+ wrapper.unmount();
51
+ });
52
+ it('Can manipulate state with setOpen', () => {
53
+ const CloseButton = (props) => <__1.Button {...props}/>;
54
+ const Component = () => {
55
+ const { getDetailsProps, setOpen, open } = __1.useDetails({ closeOnOutsideClick: true, defaultOpen: true });
56
+ return (<__1.Details {...getDetailsProps()}>
57
+ <__1.Button as="summary">{open ? 'Open' : 'Closed'}</__1.Button>
58
+ <CloseButton onClick={() => setOpen(false)}/>
59
+ </__1.Details>);
60
+ };
61
+ const wrapper = testing_1.mount(<Component />);
62
+ wrapper.find(CloseButton).simulate('click');
63
+ const dom = wrapper.getDOMNode();
64
+ const summary = wrapper.find('summary');
65
+ expect(summary.text()).toEqual('Closed');
66
+ expect(dom.hasAttribute('open')).toEqual(false);
67
+ wrapper.unmount();
68
+ });
69
+ it('Does not toggle when you click inside', () => {
70
+ const Component = () => {
71
+ const { getDetailsProps, open } = __1.useDetails({ closeOnOutsideClick: true, defaultOpen: true });
72
+ return (<__1.Details {...getDetailsProps()}>
73
+ <__1.Button as="summary">{open ? 'Open' : 'Closed'}</__1.Button>
74
+ <__1.Box>
75
+ <__1.ButtonPrimary>hi</__1.ButtonPrimary>
76
+ </__1.Box>
77
+ </__1.Details>);
78
+ };
79
+ const wrapper = testing_1.mount(<Component />);
80
+ const summary = wrapper.find('summary');
81
+ wrapper.find(__1.ButtonPrimary).simulate('click');
82
+ expect(summary.text()).toEqual('Open');
83
+ wrapper.unmount();
84
+ });
85
+ });
@@ -0,0 +1,139 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ const react_1 = __importStar(require("react"));
23
+ const __1 = require("..");
24
+ const react_2 = require("@testing-library/react");
25
+ const jest_axe_1 = require("jest-axe");
26
+ require("babel-polyfill");
27
+ const testing_1 = require("../utils/testing");
28
+ expect.extend(jest_axe_1.toHaveNoViolations);
29
+ const comp = (<__1.Dialog isOpen onDismiss={() => null} aria-labelledby="header">
30
+ <__1.Dialog.Header id="header">Title</__1.Dialog.Header>
31
+ <__1.Box p={3}>
32
+ <__1.Text fontFamily="sans-serif">Some content</__1.Text>
33
+ </__1.Box>
34
+ </__1.Dialog>);
35
+ const Component = () => {
36
+ const [isOpen, setIsOpen] = react_1.useState(true);
37
+ const returnFocusRef = react_1.useRef(null);
38
+ return (<div>
39
+ <__1.Button data-testid="trigger-button" ref={returnFocusRef} onClick={() => setIsOpen(true)}>
40
+ Show Dialog
41
+ </__1.Button>
42
+ <__1.Dialog returnFocusRef={returnFocusRef} isOpen={isOpen} onDismiss={() => setIsOpen(false)} aria-labelledby="header">
43
+ <div data-testid="inner">
44
+ <__1.Dialog.Header id="header">Title</__1.Dialog.Header>
45
+ <__1.Box p={3}>
46
+ <__1.Text fontFamily="sans-serif">Some content</__1.Text>
47
+ </__1.Box>
48
+ </div>
49
+ </__1.Dialog>
50
+ </div>);
51
+ };
52
+ const ClosedDialog = () => {
53
+ return (<__1.Dialog isOpen={false} onDismiss={() => null} aria-labelledby="header">
54
+ <div data-testid="inner">
55
+ <__1.Dialog.Header id="header">Title</__1.Dialog.Header>
56
+ <__1.Box p={3}>
57
+ <__1.Text fontFamily="sans-serif">Some content</__1.Text>
58
+ </__1.Box>
59
+ </div>
60
+ </__1.Dialog>);
61
+ };
62
+ const DialogWithCustomFocusRef = () => {
63
+ const buttonRef = react_1.useRef(null);
64
+ return (<__1.Dialog isOpen initialFocusRef={buttonRef} onDismiss={() => null} aria-labelledby="header">
65
+ <div data-testid="inner">
66
+ <__1.Dialog.Header id="header">Title</__1.Dialog.Header>
67
+ <__1.Box p={3}>
68
+ <__1.Text fontFamily="sans-serif">Some content</__1.Text>
69
+ <button data-testid="inner-button" ref={buttonRef}>
70
+ hi
71
+ </button>
72
+ </__1.Box>
73
+ </div>
74
+ </__1.Dialog>);
75
+ };
76
+ describe('Dialog', () => {
77
+ // because Dialog returns a React fragment the as and sx tests fail always, so they are skipped
78
+ testing_1.behavesAsComponent({
79
+ Component: __1.Dialog,
80
+ toRender: () => comp,
81
+ options: { skipAs: true, skipSx: true }
82
+ });
83
+ testing_1.checkExports('Dialog', {
84
+ default: __1.Dialog
85
+ });
86
+ describe('Dialog.Header', () => {
87
+ testing_1.behavesAsComponent({ Component: __1.Dialog.Header });
88
+ });
89
+ it('should have no axe violations', async () => {
90
+ const spy = jest.spyOn(console, 'warn').mockImplementation();
91
+ const { container } = react_2.render(comp);
92
+ spy.mockRestore();
93
+ const results = await jest_axe_1.axe(container);
94
+ expect(results).toHaveNoViolations();
95
+ react_2.cleanup();
96
+ });
97
+ it('Toggles when you click close button', async () => {
98
+ const { getByLabelText, getByTestId, queryByTestId } = react_2.render(<Component />);
99
+ expect(getByTestId('inner')).toBeTruthy();
100
+ react_2.act(() => {
101
+ react_2.fireEvent.click(getByLabelText('Close'));
102
+ });
103
+ expect(queryByTestId('inner')).toBeNull();
104
+ react_2.cleanup();
105
+ });
106
+ it('Renders dialog when isOpen is true', async () => {
107
+ const { getByTestId } = react_2.render(<Component />);
108
+ expect(getByTestId('inner')).toBeTruthy();
109
+ react_2.cleanup();
110
+ });
111
+ it('Does not render dialog when isOpen is false', async () => {
112
+ const { queryByTestId } = react_2.render(<ClosedDialog />);
113
+ expect(queryByTestId('inner')).toBeNull();
114
+ react_2.cleanup();
115
+ });
116
+ it('Focuses close button when Dialog is opened', async () => {
117
+ const { getByLabelText } = react_2.render(<Component />);
118
+ const closeButton = getByLabelText('Close');
119
+ expect(document.activeElement).toEqual(closeButton);
120
+ react_2.cleanup();
121
+ });
122
+ it('Focuses custom ref when Dialog is opened', async () => {
123
+ const { getByTestId } = react_2.render(<DialogWithCustomFocusRef />);
124
+ const innerButton = getByTestId('inner-button');
125
+ expect(document.activeElement).toEqual(innerButton);
126
+ react_2.cleanup();
127
+ });
128
+ it('Returns focus to returnFocusRef', async () => {
129
+ const { getByLabelText, getByTestId, queryByTestId } = react_2.render(<Component />);
130
+ expect(getByTestId('inner')).toBeTruthy();
131
+ react_2.act(() => {
132
+ react_2.fireEvent.click(getByLabelText('Close'));
133
+ });
134
+ expect(queryByTestId('inner')).toBeNull();
135
+ const triggerButton = getByTestId('trigger-button');
136
+ expect(document.activeElement).toEqual(triggerButton);
137
+ react_2.cleanup();
138
+ });
139
+ });
@@ -0,0 +1,49 @@
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('Dropdown', () => {
14
+ testing_1.behavesAsComponent({ Component: __1.Dropdown, toRender: () => <__1.Dropdown>Hello!</__1.Dropdown> });
15
+ testing_1.checkExports('Dropdown', {
16
+ default: __1.Dropdown
17
+ });
18
+ it('should have no axe violations', async () => {
19
+ const { container } = react_2.render(<__1.Dropdown />);
20
+ const results = await jest_axe_1.axe(container);
21
+ expect(results).toHaveNoViolations();
22
+ react_2.cleanup();
23
+ });
24
+ });
25
+ describe('Dropdown.Item', () => {
26
+ testing_1.behavesAsComponent({
27
+ Component: __1.Dropdown.Item,
28
+ toRender: () => <__1.Dropdown.Item>Hello!</__1.Dropdown.Item>
29
+ });
30
+ });
31
+ describe('Dropdown.Button', () => {
32
+ testing_1.behavesAsComponent({
33
+ Component: __1.Dropdown.Button,
34
+ toRender: () => <__1.Dropdown.Button>Hello!</__1.Dropdown.Button>
35
+ });
36
+ });
37
+ describe('Dropdown.Caret', () => {
38
+ testing_1.behavesAsComponent({ Component: __1.Dropdown.Caret });
39
+ });
40
+ describe('Dropdown.Menu', () => {
41
+ testing_1.behavesAsComponent({
42
+ Component: __1.Dropdown.Menu,
43
+ toRender: () => (<__1.Dropdown.Menu>
44
+ <li key="a">1</li>
45
+ <li key="b">2</li>
46
+ <li key="c">3</li>
47
+ </__1.Dropdown.Menu>)
48
+ });
49
+ });