@primer/components 31.2.0-rc.b718ff50 → 31.2.0-rc.decfca99

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