@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,22 @@
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 styled_components_1 = __importDefault(require("styled-components"));
7
+ const sx_1 = __importDefault(require("./sx"));
8
+ const UnstyledTextInput = styled_components_1.default.input `
9
+ border: 0;
10
+ font-size: inherit;
11
+ font-family: inherit;
12
+ background-color: transparent;
13
+ -webkit-appearance: none;
14
+ color: inherit;
15
+ width: 100%;
16
+ &:focus {
17
+ outline: 0;
18
+ }
19
+
20
+ ${sx_1.default};
21
+ `;
22
+ exports.default = UnstyledTextInput;
@@ -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 = require("@testing-library/react");
7
+ require("babel-polyfill");
8
+ const jest_axe_1 = require("jest-axe");
9
+ const react_2 = __importDefault(require("react"));
10
+ const theme_1 = __importDefault(require("../theme"));
11
+ const ActionList_1 = require("../ActionList");
12
+ const testing_1 = require("../utils/testing");
13
+ const __1 = require("..");
14
+ expect.extend(jest_axe_1.toHaveNoViolations);
15
+ function SimpleActionList() {
16
+ return (<__1.ThemeProvider theme={theme_1.default}>
17
+ <__1.BaseStyles>
18
+ <ActionList_1.ActionList items={[
19
+ { text: 'New file' },
20
+ ActionList_1.ActionList.Divider,
21
+ { text: 'Copy link' },
22
+ { text: 'Edit file' },
23
+ { text: 'Delete file', variant: 'danger' }
24
+ ]}/>
25
+ </__1.BaseStyles>
26
+ </__1.ThemeProvider>);
27
+ }
28
+ describe('ActionList', () => {
29
+ testing_1.behavesAsComponent({
30
+ Component: ActionList_1.ActionList,
31
+ options: { skipAs: true, skipSx: true },
32
+ toRender: () => <ActionList_1.ActionList items={[]}/>
33
+ });
34
+ testing_1.checkExports('ActionList', {
35
+ default: undefined,
36
+ ActionList: ActionList_1.ActionList
37
+ });
38
+ it('should have no axe violations', async () => {
39
+ const { container } = react_1.render(<SimpleActionList />);
40
+ const results = await jest_axe_1.axe(container);
41
+ expect(results).toHaveNoViolations();
42
+ react_1.cleanup();
43
+ });
44
+ });
45
+ describe('ActionList.Item', () => {
46
+ testing_1.behavesAsComponent({
47
+ Component: ActionList_1.ActionList.Item
48
+ });
49
+ });
@@ -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
+ exports.cannotUseAsWithoutRenderProp = exports.cannotUseAnchorDOMProps = exports.canUseDivDOMProps = exports.listWithSingleItem = exports.emptyList = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const __1 = require("..");
9
+ function emptyList() {
10
+ return <__1.ActionList items={[]}/>;
11
+ }
12
+ exports.emptyList = emptyList;
13
+ function listWithSingleItem() {
14
+ return <__1.ActionList items={[{ text: 'One' }]}/>;
15
+ }
16
+ exports.listWithSingleItem = listWithSingleItem;
17
+ function canUseDivDOMProps() {
18
+ return (<__1.ActionList items={[
19
+ {
20
+ text: 'One',
21
+ onMouseDown: () => undefined
22
+ }
23
+ ]}/>);
24
+ }
25
+ exports.canUseDivDOMProps = canUseDivDOMProps;
26
+ function cannotUseAnchorDOMProps() {
27
+ return (<__1.ActionList items={[
28
+ {
29
+ text: 'One',
30
+ // @ts-expect-error href is not a div DOM prop
31
+ href: '#'
32
+ }
33
+ ]}/>);
34
+ }
35
+ exports.cannotUseAnchorDOMProps = cannotUseAnchorDOMProps;
36
+ function cannotUseAsWithoutRenderProp() {
37
+ return (<__1.ActionList items={[
38
+ {
39
+ text: 'One',
40
+ // @ts-expect-error as is only available via manual rendering of items
41
+ as: 'a'
42
+ }
43
+ ]}/>);
44
+ }
45
+ exports.cannotUseAsWithoutRenderProp = cannotUseAsWithoutRenderProp;
@@ -0,0 +1,46 @@
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 = require("@testing-library/react");
7
+ require("babel-polyfill");
8
+ const jest_axe_1 = require("jest-axe");
9
+ const react_2 = __importDefault(require("react"));
10
+ const theme_1 = __importDefault(require("../theme"));
11
+ const ActionList2_1 = require("../ActionList2");
12
+ const testing_1 = require("../utils/testing");
13
+ const __1 = require("..");
14
+ expect.extend(jest_axe_1.toHaveNoViolations);
15
+ function SimpleActionList() {
16
+ return (<__1.ThemeProvider theme={theme_1.default}>
17
+ <__1.SSRProvider>
18
+ <__1.BaseStyles>
19
+ <ActionList2_1.ActionList>
20
+ <ActionList2_1.ActionList.Item>New file</ActionList2_1.ActionList.Item>
21
+ <ActionList2_1.ActionList.Divider />
22
+ <ActionList2_1.ActionList.Item>Copy link</ActionList2_1.ActionList.Item>
23
+ <ActionList2_1.ActionList.Item>Edit file</ActionList2_1.ActionList.Item>
24
+ <ActionList2_1.ActionList.Item variant="danger">Delete file</ActionList2_1.ActionList.Item>
25
+ </ActionList2_1.ActionList>
26
+ </__1.BaseStyles>
27
+ </__1.SSRProvider>
28
+ </__1.ThemeProvider>);
29
+ }
30
+ describe('ActionList', () => {
31
+ testing_1.behavesAsComponent({
32
+ Component: ActionList2_1.ActionList,
33
+ options: { skipAs: true, skipSx: true },
34
+ toRender: () => <ActionList2_1.ActionList />
35
+ });
36
+ testing_1.checkExports('ActionList2', {
37
+ default: undefined,
38
+ ActionList: ActionList2_1.ActionList
39
+ });
40
+ it('should have no axe violations', async () => {
41
+ const { container } = react_1.render(<SimpleActionList />);
42
+ const results = await jest_axe_1.axe(container);
43
+ expect(results).toHaveNoViolations();
44
+ react_1.cleanup();
45
+ });
46
+ });
@@ -0,0 +1,124 @@
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 = require("@testing-library/react");
7
+ require("babel-polyfill");
8
+ const jest_axe_1 = require("jest-axe");
9
+ const react_2 = __importDefault(require("react"));
10
+ const theme_1 = __importDefault(require("../theme"));
11
+ const ActionMenu_1 = require("../ActionMenu");
12
+ const testing_1 = require("../utils/testing");
13
+ const __1 = require("..");
14
+ expect.extend(jest_axe_1.toHaveNoViolations);
15
+ const items = [
16
+ { text: 'New file' },
17
+ { text: 'Copy link' },
18
+ { text: 'Edit file' },
19
+ { text: 'Delete file', variant: 'danger' }
20
+ ];
21
+ const mockOnActivate = jest.fn();
22
+ function SimpleActionMenu() {
23
+ return (<__1.ThemeProvider theme={theme_1.default}>
24
+ <__1.SSRProvider>
25
+ <__1.BaseStyles>
26
+ <div id="something-else">X</div>
27
+ <ActionMenu_1.ActionMenu onAction={mockOnActivate} anchorContent="Menu" items={items}/>
28
+ <div id="portal-root"></div>
29
+ </__1.BaseStyles>
30
+ </__1.SSRProvider>
31
+ </__1.ThemeProvider>);
32
+ }
33
+ describe('ActionMenu', () => {
34
+ afterEach(() => {
35
+ jest.clearAllMocks();
36
+ });
37
+ testing_1.behavesAsComponent({
38
+ Component: ActionMenu_1.ActionMenu,
39
+ options: { skipAs: true, skipSx: true },
40
+ toRender: () => (<__1.SSRProvider>
41
+ <ActionMenu_1.ActionMenu items={[]}/>
42
+ </__1.SSRProvider>)
43
+ });
44
+ testing_1.checkExports('ActionMenu', {
45
+ default: undefined,
46
+ ActionMenu: ActionMenu_1.ActionMenu
47
+ });
48
+ it('should have no axe violations', async () => {
49
+ const { container } = react_1.render(<SimpleActionMenu />);
50
+ const results = await jest_axe_1.axe(container);
51
+ expect(results).toHaveNoViolations();
52
+ react_1.cleanup();
53
+ });
54
+ it('should trigger the overlay on trigger click', async () => {
55
+ const menu = react_1.render(<SimpleActionMenu />);
56
+ let portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
57
+ expect(portalRoot).toBeNull();
58
+ const anchor = await menu.findByText('Menu');
59
+ react_1.act(() => {
60
+ react_1.fireEvent.click(anchor);
61
+ });
62
+ portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
63
+ expect(portalRoot).toBeTruthy();
64
+ const itemText = items
65
+ .map((i) => {
66
+ if (i.hasOwnProperty('text')) {
67
+ return i.text;
68
+ }
69
+ })
70
+ .join('');
71
+ expect(portalRoot?.textContent?.trim()).toEqual(itemText);
72
+ });
73
+ it('should dismiss the overlay on menuitem click', async () => {
74
+ const menu = react_1.render(<SimpleActionMenu />);
75
+ let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
76
+ expect(portalRoot).toBeNull();
77
+ const anchor = await menu.findByText('Menu');
78
+ react_1.act(() => {
79
+ react_1.fireEvent.click(anchor);
80
+ });
81
+ portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
82
+ expect(portalRoot).toBeTruthy();
83
+ const menuItem = await menu.queryByText(items[0].text);
84
+ react_1.act(() => {
85
+ react_1.fireEvent.click(menuItem);
86
+ });
87
+ expect(portalRoot?.textContent).toEqual(''); // menu items are hidden
88
+ });
89
+ it('should dismiss the overlay on clicking outside overlay', async () => {
90
+ const menu = react_1.render(<SimpleActionMenu />);
91
+ let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
92
+ expect(portalRoot).toBeNull();
93
+ const anchor = await menu.findByText('Menu');
94
+ react_1.act(() => {
95
+ react_1.fireEvent.click(anchor);
96
+ });
97
+ portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
98
+ expect(portalRoot).toBeTruthy();
99
+ const somethingElse = (await menu.baseElement.querySelector('#something-else'));
100
+ react_1.act(() => {
101
+ react_1.fireEvent.mouseDown(somethingElse);
102
+ });
103
+ expect(portalRoot?.textContent).toEqual(''); // menu items are hidden
104
+ });
105
+ it('should pass correct values to onAction on menu click', async () => {
106
+ const menu = react_1.render(<SimpleActionMenu />);
107
+ let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
108
+ expect(portalRoot).toBeNull();
109
+ const anchor = await menu.findByText('Menu');
110
+ react_1.act(() => {
111
+ react_1.fireEvent.click(anchor);
112
+ });
113
+ portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
114
+ expect(portalRoot).toBeTruthy();
115
+ const menuItem = (await portalRoot?.querySelector("[role='menuitem']"));
116
+ react_1.act(() => {
117
+ react_1.fireEvent.click(menuItem);
118
+ });
119
+ // onAction has been called with correct argument
120
+ expect(mockOnActivate).toHaveBeenCalledTimes(1);
121
+ const arg = mockOnActivate.mock.calls[0][0];
122
+ expect(arg.text).toEqual(items[0].text);
123
+ });
124
+ });
@@ -0,0 +1,121 @@
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 AnchoredOverlay_1 = require("../AnchoredOverlay");
27
+ const testing_1 = require("../utils/testing");
28
+ const react_2 = require("@testing-library/react");
29
+ const jest_axe_1 = require("jest-axe");
30
+ require("babel-polyfill");
31
+ const index_1 = require("../index");
32
+ const theme_1 = __importDefault(require("../theme"));
33
+ const BaseStyles_1 = __importDefault(require("../BaseStyles"));
34
+ const ThemeProvider_1 = require("../ThemeProvider");
35
+ expect.extend(jest_axe_1.toHaveNoViolations);
36
+ const AnchoredOverlayTestComponent = ({ initiallyOpen = false, onOpenCallback, onCloseCallback } = {}) => {
37
+ const [open, setOpen] = react_1.useState(initiallyOpen);
38
+ const onOpen = react_1.useCallback((gesture) => {
39
+ setOpen(true);
40
+ onOpenCallback?.(gesture);
41
+ }, [onOpenCallback]);
42
+ const onClose = react_1.useCallback((gesture) => {
43
+ setOpen(true);
44
+ onCloseCallback?.(gesture);
45
+ }, [onCloseCallback]);
46
+ return (<ThemeProvider_1.ThemeProvider theme={theme_1.default}>
47
+ <index_1.SSRProvider>
48
+ <BaseStyles_1.default>
49
+ <AnchoredOverlay_1.AnchoredOverlay open={open} onOpen={onOpen} onClose={onClose} renderAnchor={props => <index_1.Button {...props}>Anchor Button</index_1.Button>}>
50
+ <button type="button">Focusable Child</button>
51
+ </AnchoredOverlay_1.AnchoredOverlay>
52
+ </BaseStyles_1.default>
53
+ </index_1.SSRProvider>
54
+ </ThemeProvider_1.ThemeProvider>);
55
+ };
56
+ describe('AnchoredOverlay', () => {
57
+ testing_1.behavesAsComponent({
58
+ Component: AnchoredOverlay_1.AnchoredOverlay,
59
+ options: { skipAs: true, skipSx: true },
60
+ toRender: () => <AnchoredOverlayTestComponent />
61
+ });
62
+ testing_1.checkExports('AnchoredOverlay', {
63
+ default: undefined,
64
+ AnchoredOverlay: AnchoredOverlay_1.AnchoredOverlay
65
+ });
66
+ it('should have no axe violations when open', async () => {
67
+ const { container } = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true}></AnchoredOverlayTestComponent>);
68
+ const results = await jest_axe_1.axe(container);
69
+ expect(results).toHaveNoViolations();
70
+ react_2.cleanup();
71
+ });
72
+ it('should have no axe violations when closed', async () => {
73
+ const { container } = react_2.render(<AnchoredOverlayTestComponent></AnchoredOverlayTestComponent>);
74
+ const results = await jest_axe_1.axe(container);
75
+ expect(results).toHaveNoViolations();
76
+ react_2.cleanup();
77
+ });
78
+ it('should call onOpen when the anchor is clicked', () => {
79
+ const mockOpenCallback = jest.fn();
80
+ const mockCloseCallback = jest.fn();
81
+ const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
82
+ const anchor = anchoredOverlay.baseElement.querySelector('[aria-haspopup="true"]');
83
+ react_2.fireEvent.click(anchor);
84
+ expect(mockOpenCallback).toHaveBeenCalledTimes(1);
85
+ expect(mockOpenCallback).toHaveBeenCalledWith('anchor-click');
86
+ expect(mockCloseCallback).toHaveBeenCalledTimes(0);
87
+ });
88
+ it('should call onOpen when the anchor activated by a key press', () => {
89
+ const mockOpenCallback = jest.fn();
90
+ const mockCloseCallback = jest.fn();
91
+ const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
92
+ const anchor = anchoredOverlay.baseElement.querySelector('[aria-haspopup="true"]');
93
+ react_2.fireEvent.keyDown(anchor, { key: ' ' });
94
+ expect(mockOpenCallback).toHaveBeenCalledTimes(1);
95
+ expect(mockOpenCallback).toHaveBeenCalledWith('anchor-key-press');
96
+ expect(mockCloseCallback).toHaveBeenCalledTimes(0);
97
+ });
98
+ it('should call onClose when the user clicks off of the overlay', () => {
99
+ const mockOpenCallback = jest.fn();
100
+ const mockCloseCallback = jest.fn();
101
+ const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true} onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
102
+ react_2.fireEvent.mouseDown(anchoredOverlay.baseElement);
103
+ expect(mockOpenCallback).toHaveBeenCalledTimes(0);
104
+ expect(mockCloseCallback).toHaveBeenCalledTimes(1);
105
+ expect(mockCloseCallback).toHaveBeenCalledWith('click-outside');
106
+ });
107
+ it('should call onClose when the escape key is pressed', async () => {
108
+ const mockOpenCallback = jest.fn();
109
+ const mockCloseCallback = jest.fn();
110
+ const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true} onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
111
+ const overlay = await anchoredOverlay.findByRole('none');
112
+ react_2.fireEvent.keyDown(overlay, { key: 'Escape' });
113
+ expect(mockOpenCallback).toHaveBeenCalledTimes(0);
114
+ expect(mockCloseCallback).toHaveBeenCalledTimes(1);
115
+ expect(mockCloseCallback).toHaveBeenCalledWith('escape');
116
+ });
117
+ it('should render consistently when open', () => {
118
+ const { container } = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true}/>);
119
+ expect(container).toMatchSnapshot();
120
+ });
121
+ });