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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/.github/workflows/ci.yml +5 -2
  2. package/.github/workflows/release.yml +1 -0
  3. package/.github/workflows/release_canary.yml +1 -0
  4. package/CHANGELOG.md +18 -0
  5. package/dist/browser.esm.js +656 -645
  6. package/dist/browser.esm.js.map +1 -1
  7. package/dist/browser.umd.js +211 -200
  8. package/dist/browser.umd.js.map +1 -1
  9. package/docs/content/ActionList2.mdx +358 -0
  10. package/docs/content/StateLabel.md +5 -4
  11. package/docs/content/getting-started.md +1 -1
  12. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +17 -0
  13. package/lib/ActionList/Divider.jsx +29 -0
  14. package/lib/ActionList/Group.jsx +23 -0
  15. package/lib/ActionList/Header.jsx +66 -0
  16. package/lib/ActionList/Item.js +28 -19
  17. package/lib/ActionList/Item.jsx +311 -0
  18. package/lib/ActionList/List.jsx +138 -0
  19. package/lib/ActionList/index.js +12 -23
  20. package/lib/ActionList2/Description.d.ts +12 -0
  21. package/lib/ActionList2/Description.js +57 -0
  22. package/lib/ActionList2/Description.jsx +29 -0
  23. package/lib/ActionList2/Divider.d.ts +5 -0
  24. package/lib/ActionList2/Divider.js +35 -0
  25. package/lib/ActionList2/Divider.jsx +22 -0
  26. package/lib/ActionList2/Group.d.ts +11 -0
  27. package/lib/ActionList2/Group.js +57 -0
  28. package/lib/ActionList2/Group.jsx +25 -0
  29. package/lib/ActionList2/Header.d.ts +26 -0
  30. package/lib/ActionList2/Header.js +55 -0
  31. package/lib/ActionList2/Header.jsx +36 -0
  32. package/lib/ActionList2/Item.d.ts +63 -0
  33. package/lib/ActionList2/Item.js +242 -0
  34. package/lib/ActionList2/Item.jsx +174 -0
  35. package/lib/ActionList2/LinkItem.d.ts +17 -0
  36. package/lib/ActionList2/LinkItem.js +57 -0
  37. package/lib/ActionList2/LinkItem.jsx +28 -0
  38. package/lib/ActionList2/List.d.ts +26 -0
  39. package/lib/ActionList2/List.js +59 -0
  40. package/lib/ActionList2/List.jsx +41 -0
  41. package/lib/ActionList2/Selection.d.ts +5 -0
  42. package/lib/ActionList2/Selection.js +84 -0
  43. package/lib/ActionList2/Selection.jsx +50 -0
  44. package/lib/ActionList2/Visuals.d.ts +9 -0
  45. package/lib/ActionList2/Visuals.js +90 -0
  46. package/lib/ActionList2/Visuals.jsx +48 -0
  47. package/lib/ActionList2/index.d.ts +36 -0
  48. package/lib/ActionList2/index.js +29 -0
  49. package/lib/ActionMenu.jsx +73 -0
  50. package/lib/AnchoredOverlay/AnchoredOverlay.jsx +100 -0
  51. package/lib/AnchoredOverlay/index.js +4 -12
  52. package/lib/Autocomplete/Autocomplete.d.ts +28 -28
  53. package/lib/Autocomplete/Autocomplete.jsx +100 -0
  54. package/lib/Autocomplete/AutocompleteContext.jsx +5 -0
  55. package/lib/Autocomplete/AutocompleteInput.d.ts +28 -28
  56. package/lib/Autocomplete/AutocompleteInput.jsx +113 -0
  57. package/lib/Autocomplete/AutocompleteMenu.jsx +190 -0
  58. package/lib/Autocomplete/AutocompleteOverlay.jsx +55 -0
  59. package/lib/Autocomplete/index.js +7 -14
  60. package/lib/Avatar.jsx +34 -0
  61. package/lib/AvatarPair.jsx +29 -0
  62. package/lib/AvatarStack.jsx +151 -0
  63. package/lib/BaseStyles.jsx +65 -0
  64. package/lib/BorderBox.jsx +18 -0
  65. package/lib/Box.jsx +10 -0
  66. package/lib/BranchName.jsx +20 -0
  67. package/lib/Breadcrumbs.jsx +74 -0
  68. package/lib/Button/Button.d.ts +25 -25
  69. package/lib/Button/Button.jsx +60 -0
  70. package/lib/Button/ButtonBase.jsx +36 -0
  71. package/lib/Button/ButtonClose.d.ts +45 -45
  72. package/lib/Button/ButtonClose.jsx +55 -0
  73. package/lib/Button/ButtonDanger.d.ts +25 -25
  74. package/lib/Button/ButtonDanger.jsx +63 -0
  75. package/lib/Button/ButtonGroup.jsx +55 -0
  76. package/lib/Button/ButtonInvisible.d.ts +25 -25
  77. package/lib/Button/ButtonInvisible.jsx +52 -0
  78. package/lib/Button/ButtonOutline.d.ts +25 -25
  79. package/lib/Button/ButtonOutline.jsx +63 -0
  80. package/lib/Button/ButtonPrimary.d.ts +25 -25
  81. package/lib/Button/ButtonPrimary.jsx +62 -0
  82. package/lib/Button/ButtonStyles.jsx +37 -0
  83. package/lib/Button/ButtonTableList.jsx +49 -0
  84. package/lib/Button/index.js +21 -70
  85. package/lib/Caret.jsx +93 -0
  86. package/lib/CircleBadge.jsx +43 -0
  87. package/lib/CircleOcticon.d.ts +42 -42
  88. package/lib/CircleOcticon.jsx +21 -0
  89. package/lib/CounterLabel.jsx +44 -0
  90. package/lib/Details.jsx +21 -0
  91. package/lib/Dialog/ConfirmationDialog.jsx +146 -0
  92. package/lib/Dialog/Dialog.js +1 -0
  93. package/lib/Dialog/Dialog.jsx +273 -0
  94. package/lib/Dialog.d.ts +45 -45
  95. package/lib/Dialog.jsx +131 -0
  96. package/lib/Dropdown.d.ts +176 -176
  97. package/lib/Dropdown.jsx +134 -0
  98. package/lib/DropdownMenu/DropdownButton.d.ts +46 -46
  99. package/lib/DropdownMenu/DropdownButton.jsx +14 -0
  100. package/lib/DropdownMenu/DropdownMenu.jsx +70 -0
  101. package/lib/DropdownMenu/index.js +6 -20
  102. package/lib/DropdownStyles.js +18 -26
  103. package/lib/FilterList.d.ts +42 -42
  104. package/lib/FilterList.jsx +63 -0
  105. package/lib/FilteredActionList/FilteredActionList.jsx +100 -0
  106. package/lib/FilteredActionList/index.js +4 -12
  107. package/lib/FilteredSearch.jsx +29 -0
  108. package/lib/Flash.jsx +70 -0
  109. package/lib/Flex.jsx +15 -0
  110. package/lib/FormGroup.jsx +25 -0
  111. package/lib/Grid.jsx +15 -0
  112. package/lib/Header.jsx +90 -0
  113. package/lib/Heading.jsx +21 -0
  114. package/lib/Label.jsx +84 -0
  115. package/lib/LabelGroup.jsx +19 -0
  116. package/lib/Link.jsx +38 -0
  117. package/lib/NewButton/button-counter.d.ts +6 -0
  118. package/lib/NewButton/button-counter.js +31 -0
  119. package/lib/NewButton/button-counter.jsx +14 -0
  120. package/lib/NewButton/button.d.ts +13 -0
  121. package/lib/NewButton/button.js +316 -0
  122. package/lib/NewButton/button.jsx +278 -0
  123. package/lib/NewButton/index.d.ts +14 -0
  124. package/lib/NewButton/index.js +8 -0
  125. package/lib/NewButton/types.d.ts +32 -0
  126. package/lib/NewButton/types.js +2 -0
  127. package/lib/Overlay.jsx +156 -0
  128. package/lib/Pagehead.jsx +18 -0
  129. package/lib/Pagination/Pagination.jsx +163 -0
  130. package/lib/Pagination/index.js +6 -12
  131. package/lib/Pagination/model.jsx +174 -0
  132. package/lib/PointerBox.jsx +25 -0
  133. package/lib/Popover.jsx +210 -0
  134. package/lib/Portal/Portal.jsx +79 -0
  135. package/lib/Portal/index.js +5 -16
  136. package/lib/Position.d.ts +4 -4
  137. package/lib/Position.jsx +46 -0
  138. package/lib/ProgressBar.jsx +39 -0
  139. package/lib/SelectMenu/SelectMenu.d.ts +246 -246
  140. package/lib/SelectMenu/SelectMenu.jsx +114 -0
  141. package/lib/SelectMenu/SelectMenuContext.jsx +5 -0
  142. package/lib/SelectMenu/SelectMenuDivider.jsx +43 -0
  143. package/lib/SelectMenu/SelectMenuFilter.jsx +59 -0
  144. package/lib/SelectMenu/SelectMenuFooter.jsx +46 -0
  145. package/lib/SelectMenu/SelectMenuHeader.jsx +44 -0
  146. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  147. package/lib/SelectMenu/SelectMenuItem.jsx +143 -0
  148. package/lib/SelectMenu/SelectMenuList.jsx +60 -0
  149. package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +21 -0
  150. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  151. package/lib/SelectMenu/SelectMenuModal.jsx +119 -0
  152. package/lib/SelectMenu/SelectMenuTab.jsx +93 -0
  153. package/lib/SelectMenu/SelectMenuTabPanel.jsx +43 -0
  154. package/lib/SelectMenu/SelectMenuTabs.jsx +58 -0
  155. package/lib/SelectMenu/hooks/useKeyboardNav.js +80 -96
  156. package/lib/SelectMenu/index.js +7 -14
  157. package/lib/SelectPanel/SelectPanel.jsx +105 -0
  158. package/lib/SelectPanel/index.js +4 -12
  159. package/lib/SideNav.jsx +177 -0
  160. package/lib/Spinner.jsx +35 -0
  161. package/lib/StateLabel.d.ts +1 -1
  162. package/lib/StateLabel.js +6 -1
  163. package/lib/StateLabel.jsx +94 -0
  164. package/lib/StyledOcticon.jsx +20 -0
  165. package/lib/SubNav.jsx +104 -0
  166. package/lib/TabNav.jsx +60 -0
  167. package/lib/Text.jsx +14 -0
  168. package/lib/TextInput.jsx +23 -0
  169. package/lib/TextInputWithTokens.d.ts +28 -28
  170. package/lib/TextInputWithTokens.jsx +218 -0
  171. package/lib/ThemeProvider.jsx +130 -0
  172. package/lib/Timeline.d.ts +43 -43
  173. package/lib/Timeline.jsx +124 -0
  174. package/lib/Token/AvatarToken.d.ts +1 -1
  175. package/lib/Token/AvatarToken.jsx +54 -0
  176. package/lib/Token/IssueLabelToken.d.ts +1 -1
  177. package/lib/Token/IssueLabelToken.jsx +125 -0
  178. package/lib/Token/Token.d.ts +1 -1
  179. package/lib/Token/Token.jsx +103 -0
  180. package/lib/Token/TokenBase.jsx +88 -0
  181. package/lib/Token/_RemoveTokenButton.jsx +108 -0
  182. package/lib/Token/_TokenTextContainer.jsx +49 -0
  183. package/lib/Token/index.js +11 -30
  184. package/lib/Tooltip.jsx +246 -0
  185. package/lib/Truncate.jsx +27 -0
  186. package/lib/UnderlineNav.jsx +90 -0
  187. package/lib/_TextInputWrapper.jsx +120 -0
  188. package/lib/_UnstyledTextInput.jsx +22 -0
  189. package/lib/__tests__/ActionList.test.jsx +49 -0
  190. package/lib/__tests__/ActionList.types.test.jsx +45 -0
  191. package/lib/__tests__/ActionList2.test.d.ts +1 -0
  192. package/lib/__tests__/ActionList2.test.js +53 -0
  193. package/lib/__tests__/ActionList2.test.jsx +46 -0
  194. package/lib/__tests__/ActionMenu.test.jsx +124 -0
  195. package/lib/__tests__/AnchoredOverlay.test.jsx +121 -0
  196. package/lib/__tests__/Autocomplete.test.jsx +299 -0
  197. package/lib/__tests__/Avatar.test.jsx +42 -0
  198. package/lib/__tests__/AvatarStack.test.jsx +43 -0
  199. package/lib/__tests__/BorderBox.test.jsx +36 -0
  200. package/lib/__tests__/Box.test.jsx +41 -0
  201. package/lib/__tests__/BranchName.test.jsx +27 -0
  202. package/lib/__tests__/Breadcrumbs.test.jsx +28 -0
  203. package/lib/__tests__/BreadcrumbsItem.test.jsx +31 -0
  204. package/lib/__tests__/Button.test.jsx +100 -0
  205. package/lib/__tests__/Caret.test.jsx +37 -0
  206. package/lib/__tests__/CircleBadge.test.jsx +55 -0
  207. package/lib/__tests__/CircleOcticon.test.jsx +45 -0
  208. package/lib/__tests__/ConfirmationDialog.test.jsx +119 -0
  209. package/lib/__tests__/CounterLabel.test.jsx +36 -0
  210. package/lib/__tests__/Details.test.jsx +85 -0
  211. package/lib/__tests__/Dialog.test.jsx +139 -0
  212. package/lib/__tests__/Dropdown.test.jsx +49 -0
  213. package/lib/__tests__/DropdownMenu.test.jsx +119 -0
  214. package/lib/__tests__/FilterList.test.jsx +27 -0
  215. package/lib/__tests__/FilterListItem.test.jsx +31 -0
  216. package/lib/__tests__/FilteredSearch.test.jsx +27 -0
  217. package/lib/__tests__/Flash.test.jsx +36 -0
  218. package/lib/__tests__/Flex.test.jsx +51 -0
  219. package/lib/__tests__/FormGroup.test.jsx +36 -0
  220. package/lib/__tests__/Grid.test.jsx +69 -0
  221. package/lib/__tests__/Header.test.jsx +45 -0
  222. package/lib/__tests__/Heading.test.jsx +71 -0
  223. package/lib/__tests__/KeyPaths.types.test.js +5 -8
  224. package/lib/__tests__/Label.test.jsx +33 -0
  225. package/lib/__tests__/LabelGroup.test.jsx +29 -0
  226. package/lib/__tests__/Link.test.jsx +43 -0
  227. package/lib/__tests__/Merge.types.test.js +13 -19
  228. package/lib/__tests__/NewButton.test.d.ts +1 -0
  229. package/lib/__tests__/NewButton.test.js +95 -0
  230. package/lib/__tests__/NewButton.test.jsx +61 -0
  231. package/lib/__tests__/Overlay.test.jsx +105 -0
  232. package/lib/__tests__/Pagehead.test.jsx +25 -0
  233. package/lib/__tests__/Pagination/Pagination.test.jsx +32 -0
  234. package/lib/__tests__/Pagination/PaginationModel.test.jsx +118 -0
  235. package/lib/__tests__/PointerBox.test.jsx +33 -0
  236. package/lib/__tests__/Popover.test.jsx +58 -0
  237. package/lib/__tests__/Portal.test.jsx +102 -0
  238. package/lib/__tests__/Position.test.jsx +96 -0
  239. package/lib/__tests__/ProgressBar.test.jsx +38 -0
  240. package/lib/__tests__/SelectMenu.test.jsx +120 -0
  241. package/lib/__tests__/SelectPanel.test.jsx +48 -0
  242. package/lib/__tests__/SideNav.test.jsx +55 -0
  243. package/lib/__tests__/Spinner.test.jsx +41 -0
  244. package/lib/__tests__/StateLabel.test.jsx +46 -0
  245. package/lib/__tests__/StyledOcticon.test.jsx +28 -0
  246. package/lib/__tests__/SubNav.test.jsx +47 -0
  247. package/lib/__tests__/SubNavLink.test.jsx +31 -0
  248. package/lib/__tests__/TabNav.test.jsx +32 -0
  249. package/lib/__tests__/Text.test.jsx +71 -0
  250. package/lib/__tests__/TextInput.test.jsx +45 -0
  251. package/lib/__tests__/TextInputWithTokens.test.jsx +302 -0
  252. package/lib/__tests__/ThemeProvider.test.jsx +314 -0
  253. package/lib/__tests__/Timeline.test.jsx +51 -0
  254. package/lib/__tests__/Token.test.jsx +93 -0
  255. package/lib/__tests__/Tooltip.test.jsx +46 -0
  256. package/lib/__tests__/Truncate.test.jsx +41 -0
  257. package/lib/__tests__/UnderlineNav.test.jsx +53 -0
  258. package/lib/__tests__/UnderlineNavLink.test.jsx +31 -0
  259. package/lib/__tests__/behaviors/anchoredPosition.test.js +229 -376
  260. package/lib/__tests__/behaviors/focusTrap.test.jsx +184 -0
  261. package/lib/__tests__/behaviors/focusZone.test.jsx +406 -0
  262. package/lib/__tests__/behaviors/iterateFocusableElements.test.jsx +58 -0
  263. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +145 -216
  264. package/lib/__tests__/filterObject.test.js +48 -27
  265. package/lib/__tests__/hooks/useAnchoredPosition.test.jsx +29 -0
  266. package/lib/__tests__/hooks/useOnEscapePress.test.jsx +19 -0
  267. package/lib/__tests__/hooks/useOnOutsideClick.test.jsx +63 -0
  268. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.jsx +61 -0
  269. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.jsx +56 -0
  270. package/lib/__tests__/theme.test.js +33 -34
  271. package/lib/__tests__/themeGet.test.js +12 -23
  272. package/lib/__tests__/useSafeTimeout.test.jsx +36 -0
  273. package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
  274. package/lib/__tests__/utils/createSlots.test.js +75 -0
  275. package/lib/__tests__/utils/createSlots.test.jsx +57 -0
  276. package/lib/behaviors/anchoredPosition.js +205 -234
  277. package/lib/behaviors/focusTrap.js +121 -157
  278. package/lib/behaviors/focusZone.js +434 -509
  279. package/lib/behaviors/scrollIntoViewingArea.js +18 -35
  280. package/lib/constants.js +39 -43
  281. package/lib/drafts.d.ts +8 -0
  282. package/lib/drafts.js +21 -0
  283. package/lib/hooks/index.js +16 -60
  284. package/lib/hooks/useAnchoredPosition.js +32 -40
  285. package/lib/hooks/useCombinedRefs.js +32 -36
  286. package/lib/hooks/useDetails.jsx +39 -0
  287. package/lib/hooks/useDialog.js +72 -96
  288. package/lib/hooks/useFocusTrap.js +43 -60
  289. package/lib/hooks/useFocusZone.js +54 -50
  290. package/lib/hooks/useOnEscapePress.js +25 -36
  291. package/lib/hooks/useOnOutsideClick.jsx +61 -0
  292. package/lib/hooks/useOpenAndCloseFocus.js +22 -34
  293. package/lib/hooks/useOverlay.jsx +15 -0
  294. package/lib/hooks/useProvidedRefOrCreate.js +10 -14
  295. package/lib/hooks/useProvidedStateOrCreate.js +13 -16
  296. package/lib/hooks/useRenderForcingRef.js +13 -17
  297. package/lib/hooks/useResizeObserver.js +15 -18
  298. package/lib/hooks/useSafeTimeout.js +22 -30
  299. package/lib/hooks/useScrollFlash.js +16 -23
  300. package/lib/index.d.ts +2 -0
  301. package/lib/index.js +163 -636
  302. package/lib/polyfills/eventListenerSignal.js +37 -45
  303. package/lib/stories/ActionList2.stories.js +908 -0
  304. package/lib/stories/NewButton.stories.js +230 -0
  305. package/lib/sx.d.ts +2 -0
  306. package/lib/sx.js +10 -14
  307. package/lib/theme-preval.js +65 -2945
  308. package/lib/theme.js +3 -12
  309. package/lib/utils/create-slots.d.ts +17 -0
  310. package/lib/utils/create-slots.js +105 -0
  311. package/lib/utils/create-slots.jsx +65 -0
  312. package/lib/utils/deprecate.jsx +59 -0
  313. package/lib/utils/isNumeric.jsx +7 -0
  314. package/lib/utils/iterateFocusableElements.js +63 -85
  315. package/lib/utils/ssr.jsx +6 -0
  316. package/lib/utils/test-deprecations.jsx +20 -0
  317. package/lib/utils/test-helpers.jsx +8 -0
  318. package/lib/utils/test-matchers.jsx +100 -0
  319. package/lib/utils/testing.d.ts +14 -1
  320. package/lib/utils/testing.jsx +206 -0
  321. package/lib/utils/theme.js +33 -47
  322. package/lib/utils/types/AriaRole.js +2 -1
  323. package/lib/utils/types/ComponentProps.js +2 -1
  324. package/lib/utils/types/Flatten.js +2 -1
  325. package/lib/utils/types/KeyPaths.js +2 -1
  326. package/lib/utils/types/MandateProps.js +16 -1
  327. package/lib/utils/types/Merge.js +2 -1
  328. package/lib/utils/types/index.js +16 -69
  329. package/lib/utils/uniqueId.js +5 -8
  330. package/lib/utils/use-force-update.d.ts +1 -0
  331. package/lib/utils/use-force-update.js +13 -0
  332. package/lib/utils/useIsomorphicLayoutEffect.js +8 -11
  333. package/lib/utils/userAgent.js +8 -12
  334. package/lib-esm/ActionList/Item.js +28 -19
  335. package/lib-esm/ActionList2/Description.d.ts +12 -0
  336. package/lib-esm/ActionList2/Description.js +41 -0
  337. package/lib-esm/ActionList2/Divider.d.ts +5 -0
  338. package/lib-esm/ActionList2/Divider.js +23 -0
  339. package/lib-esm/ActionList2/Group.d.ts +11 -0
  340. package/lib-esm/ActionList2/Group.js +40 -0
  341. package/lib-esm/ActionList2/Header.d.ts +26 -0
  342. package/lib-esm/ActionList2/Header.js +44 -0
  343. package/lib-esm/ActionList2/Item.d.ts +63 -0
  344. package/lib-esm/ActionList2/Item.js +208 -0
  345. package/lib-esm/ActionList2/LinkItem.d.ts +17 -0
  346. package/lib-esm/ActionList2/LinkItem.js +43 -0
  347. package/lib-esm/ActionList2/List.d.ts +26 -0
  348. package/lib-esm/ActionList2/List.js +37 -0
  349. package/lib-esm/ActionList2/Selection.d.ts +5 -0
  350. package/lib-esm/ActionList2/Selection.js +66 -0
  351. package/lib-esm/ActionList2/Visuals.d.ts +9 -0
  352. package/lib-esm/ActionList2/Visuals.js +68 -0
  353. package/lib-esm/ActionList2/index.d.ts +36 -0
  354. package/lib-esm/ActionList2/index.js +33 -0
  355. package/lib-esm/Autocomplete/Autocomplete.d.ts +28 -28
  356. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +28 -28
  357. package/lib-esm/Button/Button.d.ts +25 -25
  358. package/lib-esm/Button/ButtonClose.d.ts +45 -45
  359. package/lib-esm/Button/ButtonDanger.d.ts +25 -25
  360. package/lib-esm/Button/ButtonInvisible.d.ts +25 -25
  361. package/lib-esm/Button/ButtonOutline.d.ts +25 -25
  362. package/lib-esm/Button/ButtonPrimary.d.ts +25 -25
  363. package/lib-esm/CircleOcticon.d.ts +42 -42
  364. package/lib-esm/Dialog/Dialog.js +1 -0
  365. package/lib-esm/Dialog.d.ts +45 -45
  366. package/lib-esm/Dropdown.d.ts +176 -176
  367. package/lib-esm/DropdownMenu/DropdownButton.d.ts +46 -46
  368. package/lib-esm/FilterList.d.ts +42 -42
  369. package/lib-esm/NewButton/button-counter.d.ts +6 -0
  370. package/lib-esm/NewButton/button-counter.js +18 -0
  371. package/lib-esm/NewButton/button.d.ts +13 -0
  372. package/lib-esm/NewButton/button.js +298 -0
  373. package/lib-esm/NewButton/index.d.ts +14 -0
  374. package/lib-esm/NewButton/index.js +5 -0
  375. package/lib-esm/NewButton/types.d.ts +32 -0
  376. package/lib-esm/NewButton/types.js +1 -0
  377. package/lib-esm/Position.d.ts +4 -4
  378. package/lib-esm/SelectMenu/SelectMenu.d.ts +246 -246
  379. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  380. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  381. package/lib-esm/StateLabel.d.ts +1 -1
  382. package/lib-esm/StateLabel.js +7 -2
  383. package/lib-esm/TextInputWithTokens.d.ts +28 -28
  384. package/lib-esm/Timeline.d.ts +43 -43
  385. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  386. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  387. package/lib-esm/Token/Token.d.ts +1 -1
  388. package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
  389. package/lib-esm/__tests__/ActionList2.test.js +41 -0
  390. package/lib-esm/__tests__/NewButton.test.d.ts +1 -0
  391. package/lib-esm/__tests__/NewButton.test.js +84 -0
  392. package/lib-esm/__tests__/utils/createSlots.test.d.ts +1 -0
  393. package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
  394. package/lib-esm/drafts.d.ts +8 -0
  395. package/lib-esm/drafts.js +9 -0
  396. package/lib-esm/index.d.ts +2 -0
  397. package/lib-esm/index.js +1 -0
  398. package/lib-esm/stories/ActionList2.stories.js +796 -0
  399. package/lib-esm/stories/NewButton.stories.js +178 -0
  400. package/lib-esm/sx.d.ts +2 -0
  401. package/lib-esm/sx.js +3 -1
  402. package/lib-esm/theme-preval.js +81 -2
  403. package/lib-esm/utils/create-slots.d.ts +17 -0
  404. package/lib-esm/utils/create-slots.js +84 -0
  405. package/lib-esm/utils/testing.d.ts +14 -1
  406. package/lib-esm/utils/use-force-update.d.ts +1 -0
  407. package/lib-esm/utils/use-force-update.js +6 -0
  408. package/package-lock.json +153 -14
  409. package/package.json +7 -4
  410. package/script/build +1 -1
  411. package/src/ActionList/Item.tsx +32 -19
  412. package/src/ActionList2/Description.tsx +52 -0
  413. package/src/ActionList2/Divider.tsx +24 -0
  414. package/src/ActionList2/Group.tsx +34 -0
  415. package/src/ActionList2/Header.tsx +58 -0
  416. package/src/ActionList2/Item.tsx +246 -0
  417. package/src/ActionList2/LinkItem.tsx +49 -0
  418. package/src/ActionList2/List.tsx +55 -0
  419. package/src/ActionList2/Selection.tsx +60 -0
  420. package/src/ActionList2/Visuals.tsx +76 -0
  421. package/src/ActionList2/index.ts +39 -0
  422. package/src/Dialog/Dialog.tsx +1 -0
  423. package/src/NewButton/button-counter.tsx +15 -0
  424. package/src/NewButton/button.tsx +279 -0
  425. package/src/NewButton/index.ts +10 -0
  426. package/src/NewButton/types.ts +36 -0
  427. package/src/StateLabel.tsx +14 -2
  428. package/src/__tests__/ActionList2.test.tsx +47 -0
  429. package/src/__tests__/NewButton.test.tsx +70 -0
  430. package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
  431. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +722 -255
  432. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +1 -0
  433. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +1 -0
  434. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +1 -0
  435. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +1 -0
  436. package/src/__tests__/__snapshots__/NewButton.test.tsx.snap +300 -0
  437. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +4 -0
  438. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +1 -0
  439. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +13 -6
  440. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +1 -0
  441. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +66 -0
  442. package/src/__tests__/__snapshots__/Token.test.tsx.snap +17 -0
  443. package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
  444. package/src/__tests__/utils/createSlots.test.tsx +74 -0
  445. package/src/drafts.ts +10 -0
  446. package/src/index.ts +2 -0
  447. package/src/stories/ActionList2.stories.tsx +1291 -0
  448. package/src/stories/NewButton.stories.tsx +201 -0
  449. package/src/sx.ts +3 -0
  450. package/src/theme-preval.js +1 -0
  451. package/src/utils/create-slots.tsx +96 -0
  452. package/src/utils/use-force-update.ts +7 -0
  453. package/stats.html +1 -1
  454. package/tsconfig.base.json +20 -0
  455. package/tsconfig.build.json +2 -2
  456. package/tsconfig.json +4 -17
@@ -0,0 +1,246 @@
1
+ import React from 'react'
2
+ import {ForwardRefComponent as PolymorphicForwardRefComponent} from '@radix-ui/react-polymorphic'
3
+ import {useSSRSafeId} from '@react-aria/ssr'
4
+ import styled from 'styled-components'
5
+ import {useTheme} from '../ThemeProvider'
6
+ import Box, {BoxProps} from '../Box'
7
+ import sx, {SxProp, merge} from '../sx'
8
+ import createSlots from '../utils/create-slots'
9
+ import {AriaRole} from '../utils/types'
10
+ import {ListContext} from './List'
11
+ import {Selection} from './Selection'
12
+
13
+ export const getVariantStyles = (variant: ItemProps['variant'], disabled: ItemProps['disabled']) => {
14
+ if (disabled) {
15
+ return {
16
+ color: 'primer.fg.disabled',
17
+ iconColor: 'primer.fg.disabled',
18
+ annotationColor: 'primer.fg.disabled'
19
+ }
20
+ }
21
+
22
+ switch (variant) {
23
+ case 'danger':
24
+ return {
25
+ color: 'danger.fg',
26
+ iconColor: 'danger.fg',
27
+ annotationColor: 'fg.muted',
28
+ hoverColor: 'actionListItem.danger.hoverText'
29
+ }
30
+ default:
31
+ return {
32
+ color: 'fg.default',
33
+ iconColor: 'fg.muted',
34
+ annotationColor: 'fg.muted',
35
+ hoverColor: 'fg.default'
36
+ }
37
+ }
38
+ }
39
+
40
+ export type ItemProps = {
41
+ /**
42
+ * Primary content for an Item
43
+ */
44
+ children?: React.ReactNode
45
+ /**
46
+ * Callback that will trigger both on click selection and keyboard selection.
47
+ */
48
+ onSelect?: (event: React.MouseEvent<HTMLLIElement> | React.KeyboardEvent<HTMLLIElement>) => void
49
+ /**
50
+ * Is the `Item` is currently selected?
51
+ */
52
+ selected?: boolean
53
+ /**
54
+ * Style variations associated with various `Item` types.
55
+ *
56
+ * - `"default"` - An action `Item`.
57
+ * - `"danger"` - A destructive action `Item`.
58
+ */
59
+ variant?: 'default' | 'danger'
60
+ /**
61
+ * Items that are disabled can not be clicked, selected, or navigated through.
62
+ */
63
+ disabled?: boolean
64
+ /**
65
+ * The ARIA role describing the function of `Item` component. `option` is a common value.
66
+ */
67
+ role?: AriaRole
68
+ /**
69
+ * id to attach to the root element of the Item
70
+ */
71
+ id?: string
72
+ /**
73
+ * Private API for use internally only. Used by LinkItem to wrap contents in an anchor
74
+ */
75
+ _PrivateItemWrapper?: React.FC
76
+ } & SxProp
77
+
78
+ const {Slots, Slot} = createSlots(['LeadingVisual', 'InlineDescription', 'BlockDescription', 'TrailingVisual'])
79
+ export {Slot}
80
+ export type ItemContext = Pick<ItemProps, 'variant' | 'disabled'> & {
81
+ inlineDescriptionId: string
82
+ blockDescriptionId: string
83
+ }
84
+
85
+ const LiBox = styled.li<SxProp>(sx)
86
+ export const TEXT_ROW_HEIGHT = '20px' // custom value off the scale
87
+
88
+ export const Item = React.forwardRef<HTMLLIElement, ItemProps>(
89
+ (
90
+ {
91
+ variant = 'default',
92
+ disabled = false,
93
+ selected = undefined,
94
+ onSelect = () => null,
95
+ sx: sxProp = {},
96
+ id,
97
+ _PrivateItemWrapper,
98
+ ...props
99
+ },
100
+ forwardedRef
101
+ ): JSX.Element => {
102
+ const {variant: listVariant, showDividers} = React.useContext(ListContext)
103
+
104
+ const {theme} = useTheme()
105
+
106
+ const styles = {
107
+ display: 'flex',
108
+ paddingX: 2,
109
+ fontSize: 1,
110
+ paddingY: '6px', // custom value off the scale
111
+ lineHeight: TEXT_ROW_HEIGHT,
112
+ minHeight: 5,
113
+ marginX: listVariant === 'inset' ? 2 : 0,
114
+ borderRadius: listVariant === 'inset' ? 2 : 0,
115
+ transition: 'background 33.333ms linear',
116
+ color: getVariantStyles(variant, disabled).color,
117
+ cursor: 'pointer',
118
+ '&[aria-disabled]': {cursor: 'not-allowed'},
119
+
120
+ '@media (hover: hover) and (pointer: fine)': {
121
+ ':hover:not([aria-disabled])': {
122
+ backgroundColor: `actionListItem.${variant}.hoverBg`,
123
+ color: getVariantStyles(variant, disabled).hoverColor
124
+ },
125
+ ':focus:not([data-focus-visible-added])': {
126
+ backgroundColor: `actionListItem.${variant}.selectedBg`,
127
+ color: getVariantStyles(variant, disabled).hoverColor,
128
+ outline: 'none'
129
+ },
130
+ '&[data-focus-visible-added]': {
131
+ // we don't use :focus-visible because not all browsers (safari) have it yet
132
+ outline: 'none',
133
+ border: `2 solid`,
134
+ boxShadow: `0 0 0 2px ${theme?.colors.accent.emphasis}`
135
+ },
136
+ ':active:not([aria-disabled])': {
137
+ backgroundColor: `actionListItem.${variant}.activeBg`,
138
+ color: getVariantStyles(variant, disabled).hoverColor
139
+ }
140
+ },
141
+
142
+ /** Divider styles */
143
+ '[data-component="ActionList.Item--DividerContainer"]': {
144
+ position: 'relative'
145
+ },
146
+ '[data-component="ActionList.Item--DividerContainer"]::before': {
147
+ content: '" "',
148
+ display: 'block',
149
+ position: 'absolute',
150
+ width: '100%',
151
+ top: '-7px',
152
+ border: '0 solid',
153
+ borderTopWidth: showDividers ? `1px` : '0',
154
+ borderColor: 'var(--divider-color, transparent)'
155
+ },
156
+ // show between 2 items
157
+ ':not(:first-of-type)': {'--divider-color': theme?.colors.actionListItem.inlineDivider},
158
+ // hide divider after dividers & group header, with higher importance!
159
+ '[data-component="ActionList.Divider"] + &': {'--divider-color': 'transparent !important'},
160
+ // hide border on current and previous item
161
+ '&:hover:not([aria-disabled]), &:focus:not([aria-disabled]), &[data-focus-visible-added]:not([aria-disabled])': {
162
+ '--divider-color': 'transparent'
163
+ },
164
+ '&:hover:not([aria-disabled]) + &, &:focus:not([aria-disabled]) + &, &[data-focus-visible-added] + li': {
165
+ '--divider-color': 'transparent'
166
+ }
167
+ }
168
+
169
+ const clickHandler = React.useCallback(
170
+ event => {
171
+ if (disabled) return
172
+ if (!event.defaultPrevented) onSelect(event)
173
+ },
174
+ [onSelect, disabled]
175
+ )
176
+
177
+ const keyPressHandler = React.useCallback(
178
+ event => {
179
+ if (disabled) return
180
+
181
+ if (!event.defaultPrevented && [' ', 'Enter'].includes(event.key)) {
182
+ onSelect(event)
183
+ }
184
+ },
185
+ [onSelect, disabled]
186
+ )
187
+
188
+ // use props.id if provided, otherwise generate one.
189
+ const labelId = useSSRSafeId(id)
190
+ const inlineDescriptionId = useSSRSafeId(id && `${id}--inline-description`)
191
+ const blockDescriptionId = useSSRSafeId(id && `${id}--block-description`)
192
+
193
+ const ItemWrapper = _PrivateItemWrapper || React.Fragment
194
+
195
+ return (
196
+ <Slots context={{variant, disabled, inlineDescriptionId, blockDescriptionId}}>
197
+ {slots => (
198
+ <LiBox
199
+ ref={forwardedRef}
200
+ sx={merge(styles, sxProp as SxProp)}
201
+ onClick={clickHandler}
202
+ onKeyPress={keyPressHandler}
203
+ aria-selected={selected}
204
+ aria-disabled={disabled ? true : undefined}
205
+ tabIndex={disabled || _PrivateItemWrapper ? undefined : 0}
206
+ aria-labelledby={`${labelId} ${slots.InlineDescription ? inlineDescriptionId : ''}`}
207
+ aria-describedby={slots.BlockDescription ? blockDescriptionId : undefined}
208
+ {...props}
209
+ >
210
+ <ItemWrapper>
211
+ <Selection selected={selected} />
212
+ {slots.LeadingVisual}
213
+ <Box
214
+ data-component="ActionList.Item--DividerContainer"
215
+ sx={{display: 'flex', flexDirection: 'column', flexGrow: 1, minWidth: 0}}
216
+ >
217
+ <ConditionalBox if={Boolean(slots.TrailingVisual)} sx={{display: 'flex', flexGrow: 1}}>
218
+ <ConditionalBox
219
+ if={Boolean(slots.InlineDescription)}
220
+ sx={{display: 'flex', flexGrow: 1, alignItems: 'baseline', minWidth: 0}}
221
+ >
222
+ <Box as="span" id={labelId} sx={{flexGrow: slots.InlineDescription ? 0 : 1}}>
223
+ {props.children}
224
+ </Box>
225
+ {slots.InlineDescription}
226
+ </ConditionalBox>
227
+ {slots.TrailingVisual}
228
+ </ConditionalBox>
229
+ {slots.BlockDescription}
230
+ </Box>
231
+ </ItemWrapper>
232
+ </LiBox>
233
+ )}
234
+ </Slots>
235
+ )
236
+ }
237
+ ) as PolymorphicForwardRefComponent<'li', ItemProps>
238
+
239
+ Item.displayName = 'ActionList.Item'
240
+
241
+ const ConditionalBox: React.FC<{if: boolean} & BoxProps> = props => {
242
+ const {if: condition, ...rest} = props
243
+
244
+ if (condition) return <Box {...rest}>{props.children}</Box>
245
+ else return <>{props.children}</>
246
+ }
@@ -0,0 +1,49 @@
1
+ import React from 'react'
2
+ import {ForwardRefComponent as PolymorphicForwardRefComponent} from '@radix-ui/react-polymorphic'
3
+ import Link from '../Link'
4
+ import {SxProp, merge} from '../sx'
5
+ import {Item, ItemProps} from './Item'
6
+
7
+ // adopted from React.AnchorHTMLAttributes
8
+ type LinkProps = {
9
+ download?: string
10
+ href?: string
11
+ hrefLang?: string
12
+ media?: string
13
+ ping?: string
14
+ rel?: string
15
+ target?: string
16
+ type?: string
17
+ referrerPolicy?: React.AnchorHTMLAttributes<HTMLAnchorElement>['referrerPolicy']
18
+ }
19
+
20
+ // LinkItem does not support selected, variants, etc.
21
+ type LinkItemProps = Pick<ItemProps, 'children' | 'sx'> & LinkProps
22
+
23
+ export const LinkItem = React.forwardRef(({sx = {}, as: Component, ...props}, forwardedRef) => {
24
+ const styles = {
25
+ // occupy full size of Item
26
+ paddingX: 2,
27
+ paddingY: '6px', // custom value off the scale
28
+ display: 'flex',
29
+ flexGrow: 1, // full width
30
+ borderRadius: 2,
31
+
32
+ // inherit Item styles
33
+ color: 'inherit',
34
+ '&:hover': {color: 'inherit', textDecoration: 'none'}
35
+ }
36
+
37
+ return (
38
+ <Item
39
+ sx={{paddingY: 0, paddingX: 0}}
40
+ _PrivateItemWrapper={({children}) => (
41
+ <Link as={Component} sx={merge(styles, sx as SxProp)} {...props} ref={forwardedRef}>
42
+ {children}
43
+ </Link>
44
+ )}
45
+ >
46
+ {props.children}
47
+ </Item>
48
+ )
49
+ }) as PolymorphicForwardRefComponent<'a', LinkItemProps>
@@ -0,0 +1,55 @@
1
+ import React from 'react'
2
+ import {ForwardRefComponent as PolymorphicForwardRefComponent} from '@radix-ui/react-polymorphic'
3
+ import styled from 'styled-components'
4
+ import sx, {SxProp, merge} from '../sx'
5
+ import {AriaRole} from '../utils/types'
6
+
7
+ export type ListProps = {
8
+ /**
9
+ * `inset` children are offset (vertically and horizontally) from `List`’s edges, `full` children are flush (vertically and horizontally) with `List` edges
10
+ */
11
+ variant?: 'inset' | 'full'
12
+ /**
13
+ * Whether multiple Items or a single Item can be selected.
14
+ */
15
+ selectionVariant?: 'single' | 'multiple'
16
+ /**
17
+ * Display a divider above each `Item` in this `List` when it does not follow a `Header` or `Divider`.
18
+ */
19
+ showDividers?: boolean
20
+ /**
21
+ * The ARIA role describing the function of `List` component. `listbox` or `menu` are a common values.
22
+ */
23
+ role?: AriaRole
24
+ } & SxProp
25
+
26
+ type ContextProps = Omit<ListProps, 'sx'>
27
+ export const ListContext = React.createContext<ContextProps>({})
28
+
29
+ const ListBox = styled.ul<SxProp>(sx)
30
+
31
+ export const List = React.forwardRef<HTMLUListElement, ListProps>(
32
+ (
33
+ {variant = 'inset', selectionVariant, showDividers = false, sx: sxProp = {}, ...props},
34
+ forwardedRef
35
+ ): JSX.Element => {
36
+ const styles = {
37
+ margin: 0,
38
+ paddingInlineStart: 0, // reset ul styles
39
+ paddingY: variant === 'inset' ? 2 : 0
40
+ }
41
+
42
+ return (
43
+ <ListBox
44
+ sx={merge(styles, sxProp as SxProp)}
45
+ aria-multiselectable={selectionVariant === 'multiple' ? true : undefined}
46
+ {...props}
47
+ ref={forwardedRef}
48
+ >
49
+ <ListContext.Provider value={{variant, selectionVariant, showDividers}}>{props.children}</ListContext.Provider>
50
+ </ListBox>
51
+ )
52
+ }
53
+ ) as PolymorphicForwardRefComponent<'ul', ListProps>
54
+
55
+ List.displayName = 'ActionList'
@@ -0,0 +1,60 @@
1
+ import React from 'react'
2
+ import {CheckIcon} from '@primer/octicons-react'
3
+ import {ListContext} from './List'
4
+ import {GroupContext} from './Group'
5
+ import {ItemProps} from './Item'
6
+ import {LeadingVisualContainer} from './Visuals'
7
+
8
+ type SelectionProps = Pick<ItemProps, 'selected'>
9
+ export const Selection: React.FC<SelectionProps> = ({selected}) => {
10
+ const {selectionVariant: listSelectionVariant} = React.useContext(ListContext)
11
+ const {selectionVariant: groupSelectionVariant} = React.useContext(GroupContext)
12
+
13
+ /** selectionVariant in Group can override the selectionVariant in List root */
14
+ const selectionVariant = typeof groupSelectionVariant !== 'undefined' ? groupSelectionVariant : listSelectionVariant
15
+
16
+ // if selectionVariant is not set on List, don't show selection
17
+ if (!selectionVariant) {
18
+ // to avoid confusion, fail loudly instead of silently ignoring
19
+ if (selected)
20
+ throw new Error(
21
+ 'For Item to be selected, ActionList or ActionList.Group needs to have a selectionVariant defined'
22
+ )
23
+ return null
24
+ }
25
+
26
+ if (selectionVariant === 'single') {
27
+ return <LeadingVisualContainer>{selected && <CheckIcon />}</LeadingVisualContainer>
28
+ }
29
+
30
+ /**
31
+ * selectionVariant is multiple
32
+ * we use a svg instead of an input because there should not
33
+ * be an interactive element inside an option
34
+ * svg copied from primer/css
35
+ */
36
+ return (
37
+ <LeadingVisualContainer
38
+ sx={{
39
+ rect: {
40
+ fill: selected ? 'accent.fg' : 'canvas.default',
41
+ stroke: selected ? 'accent.fg' : 'border.default'
42
+ },
43
+ path: {
44
+ fill: 'fg.onEmphasis',
45
+ boxShadow: 'shadow.small',
46
+ opacity: selected ? 1 : 0
47
+ }
48
+ }}
49
+ >
50
+ <svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
51
+ <rect x="2" y="2" width="12" height="12" rx="4"></rect>
52
+ <path
53
+ fillRule="evenodd"
54
+ strokeWidth="0"
55
+ d="M4.03231 8.69862C3.84775 8.20646 4.49385 7.77554 4.95539 7.77554C5.41693 7.77554 6.80154 9.85246 6.80154 9.85246C6.80154 9.85246 10.2631 4.314 10.4938 4.08323C10.7246 3.85246 11.8785 4.08323 11.4169 5.00631C11.0081 5.82388 7.26308 11.4678 7.26308 11.4678C7.26308 11.4678 6.80154 12.1602 6.34 11.4678C5.87846 10.7755 4.21687 9.19077 4.03231 8.69862Z"
56
+ />
57
+ </svg>
58
+ </LeadingVisualContainer>
59
+ )
60
+ }
@@ -0,0 +1,76 @@
1
+ import React from 'react'
2
+ import Box from '../Box'
3
+ import {SxProp, merge} from '../sx'
4
+ import {get} from '../constants'
5
+ import {getVariantStyles, Slot, ItemContext, TEXT_ROW_HEIGHT} from './Item'
6
+
7
+ type VisualProps = SxProp & React.HTMLAttributes<HTMLSpanElement>
8
+
9
+ export const LeadingVisualContainer: React.FC<VisualProps> = ({sx = {}, ...props}) => {
10
+ return (
11
+ <Box
12
+ as="span"
13
+ sx={merge(
14
+ {
15
+ height: TEXT_ROW_HEIGHT, // match height of text row
16
+ minWidth: get('space.3'),
17
+ maxWidth: TEXT_ROW_HEIGHT, // square (same as height)
18
+ display: 'flex',
19
+ justifyContent: 'center',
20
+ alignItems: 'center',
21
+ flexShrink: 0,
22
+ marginRight: 2
23
+ },
24
+ sx as SxProp
25
+ )}
26
+ {...props}
27
+ />
28
+ )
29
+ }
30
+
31
+ export type LeadingVisualProps = VisualProps
32
+ export const LeadingVisual: React.FC<VisualProps> = ({sx = {}, ...props}) => {
33
+ return (
34
+ <Slot name="LeadingVisual">
35
+ {({variant, disabled}: ItemContext) => (
36
+ <LeadingVisualContainer
37
+ sx={merge(
38
+ {
39
+ color: getVariantStyles(variant, disabled).iconColor,
40
+ svg: {fontSize: 0}
41
+ },
42
+ sx as SxProp
43
+ )}
44
+ {...props}
45
+ >
46
+ {props.children}
47
+ </LeadingVisualContainer>
48
+ )}
49
+ </Slot>
50
+ )
51
+ }
52
+
53
+ export type TrailingVisualProps = VisualProps
54
+ export const TrailingVisual: React.FC<VisualProps> = ({sx = {}, ...props}) => {
55
+ return (
56
+ <Slot name="TrailingVisual">
57
+ {({variant, disabled}: ItemContext) => (
58
+ <Box
59
+ as="span"
60
+ sx={merge(
61
+ {
62
+ height: '20px', // match height of text row
63
+ flexShrink: 0,
64
+ color: getVariantStyles(variant, disabled).annotationColor,
65
+ marginLeft: 2
66
+ },
67
+ sx as SxProp
68
+ )}
69
+ {...props}
70
+ >
71
+ {props.children}
72
+ </Box>
73
+ )}
74
+ </Slot>
75
+ )
76
+ }
@@ -0,0 +1,39 @@
1
+ import {List} from './List'
2
+ import {Group} from './Group'
3
+ import {Item} from './Item'
4
+ import {LinkItem} from './LinkItem'
5
+ import {Divider} from './Divider'
6
+ import {Description} from './Description'
7
+ import {LeadingVisual, TrailingVisual} from './Visuals'
8
+
9
+ export type {ListProps as ActionListProps} from './List'
10
+ export type {GroupProps} from './Group'
11
+ export type {ItemProps} from './Item'
12
+ export type {DescriptionProps} from './Description'
13
+ export type {LeadingVisualProps, TrailingVisualProps} from './Visuals'
14
+
15
+ /**
16
+ * Collection of list-related components.
17
+ */
18
+ export const ActionList = Object.assign(List, {
19
+ /** Collects related `Items` in an `ActionList`. */
20
+ Group,
21
+
22
+ /** An actionable or selectable `Item` */
23
+ Item,
24
+
25
+ /** A `Item` that renders a full-size anchor inside ListItem */
26
+ LinkItem,
27
+
28
+ /** Visually separates `Item`s or `Group`s in an `ActionList`. */
29
+ Divider,
30
+
31
+ /** Secondary text which provides additional information about an `Item`. */
32
+ Description,
33
+
34
+ /** Icon (or similar) positioned before `Item` text. */
35
+ LeadingVisual,
36
+
37
+ /** Icon (or similar) positioned after `Item` text. */
38
+ TrailingVisual
39
+ })
@@ -372,6 +372,7 @@ const Buttons: React.FC<{buttons: DialogButtonProps[]}> = ({buttons}) => {
372
372
  <ButtonElement
373
373
  key={index}
374
374
  {...buttonProps}
375
+ variant={buttonType}
375
376
  ref={autoFocus && autoFocusCount === 0 ? (autoFocusCount++, autoFocusRef) : null}
376
377
  >
377
378
  {content}
@@ -0,0 +1,15 @@
1
+ import React from 'react'
2
+ import {SxProp} from '../sx'
3
+ import CounterLabel from '../CounterLabel'
4
+
5
+ export type CounterProps = {
6
+ children: number
7
+ } & SxProp
8
+
9
+ export const Counter = ({children, sx: sxProp = {}, ...props}: CounterProps) => {
10
+ return (
11
+ <CounterLabel data-component="ButtonCounter" sx={{ml: 2, ...sxProp}} {...props}>
12
+ {children}
13
+ </CounterLabel>
14
+ )
15
+ }