@primer/components 0.0.0-202110303104 → 0.0.0-2021103082237

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 (435) hide show
  1. package/CHANGELOG.md +90 -4
  2. package/dist/browser.esm.js +738 -779
  3. package/dist/browser.esm.js.map +1 -1
  4. package/dist/browser.umd.js +736 -777
  5. package/dist/browser.umd.js.map +1 -1
  6. package/lib/ActionList/Item.js +27 -52
  7. package/lib/ActionList/index.js +23 -12
  8. package/lib/ActionList2/Group.d.ts +28 -2
  9. package/lib/ActionList2/Group.js +55 -6
  10. package/lib/ActionList2/List.d.ts +1 -1
  11. package/lib/ActionList2/List.js +1 -2
  12. package/lib/ActionList2/index.js +41 -23
  13. package/lib/AnchoredOverlay/index.js +12 -4
  14. package/lib/Autocomplete/Autocomplete.d.ts +11 -3
  15. package/lib/Autocomplete/AutocompleteInput.d.ts +11 -3
  16. package/lib/Autocomplete/index.js +14 -7
  17. package/lib/Breadcrumbs.d.ts +8 -7
  18. package/lib/Breadcrumbs.js +7 -12
  19. package/lib/Button/Button.d.ts +2 -3
  20. package/lib/Button/Button.js +2 -6
  21. package/lib/Button/ButtonBase.d.ts +5 -8
  22. package/lib/Button/ButtonBase.js +1 -5
  23. package/lib/Button/ButtonClose.d.ts +3 -46
  24. package/lib/Button/ButtonClose.js +1 -1
  25. package/lib/Button/ButtonDanger.d.ts +2 -3
  26. package/lib/Button/ButtonDanger.js +2 -6
  27. package/lib/Button/ButtonInvisible.d.ts +2 -3
  28. package/lib/Button/ButtonInvisible.js +2 -6
  29. package/lib/Button/ButtonOutline.d.ts +2 -3
  30. package/lib/Button/ButtonOutline.js +2 -6
  31. package/lib/Button/ButtonPrimary.d.ts +2 -3
  32. package/lib/Button/ButtonPrimary.js +2 -6
  33. package/lib/Button/ButtonTableList.d.ts +1 -2
  34. package/lib/Button/ButtonTableList.js +1 -1
  35. package/lib/Button/index.js +70 -21
  36. package/lib/Checkbox.d.ts +29 -0
  37. package/lib/Checkbox.js +64 -0
  38. package/lib/CircleBadge.d.ts +4 -5
  39. package/lib/CircleBadge.js +1 -1
  40. package/lib/CircleOcticon.d.ts +1 -1
  41. package/lib/CounterLabel.d.ts +1 -2
  42. package/lib/CounterLabel.js +1 -1
  43. package/lib/Dialog/Dialog.d.ts +5 -9
  44. package/lib/Dialog/Dialog.js +17 -11
  45. package/lib/Dialog.d.ts +4 -5
  46. package/lib/Dialog.js +1 -1
  47. package/lib/Dropdown.d.ts +10 -99
  48. package/lib/Dropdown.js +3 -3
  49. package/lib/DropdownMenu/DropdownButton.d.ts +3 -47
  50. package/lib/DropdownMenu/DropdownButton.js +3 -1
  51. package/lib/DropdownMenu/index.js +20 -6
  52. package/lib/DropdownStyles.js +26 -18
  53. package/lib/FilterList.d.ts +264 -303
  54. package/lib/FilterList.js +2 -6
  55. package/lib/FilteredActionList/index.js +12 -4
  56. package/lib/FilteredSearch.d.ts +1 -2
  57. package/lib/FilteredSearch.js +1 -1
  58. package/lib/Flash.d.ts +1 -2
  59. package/lib/Flash.js +1 -1
  60. package/lib/FormGroup.d.ts +4 -5
  61. package/lib/FormGroup.js +2 -2
  62. package/lib/Header.d.ts +6 -7
  63. package/lib/Header.js +4 -4
  64. package/lib/Label.d.ts +1 -2
  65. package/lib/Label.js +2 -3
  66. package/lib/LabelGroup.d.ts +1 -2
  67. package/lib/LabelGroup.js +1 -1
  68. package/lib/Link.d.ts +1 -2
  69. package/lib/Link.js +1 -1
  70. package/lib/NewButton/button.js +34 -42
  71. package/lib/NewButton/index.js +12 -5
  72. package/lib/NewButton/types.js +1 -2
  73. package/lib/Overlay.d.ts +14 -11
  74. package/lib/Overlay.js +3 -4
  75. package/lib/Pagehead.d.ts +1 -2
  76. package/lib/Pagehead.js +1 -1
  77. package/lib/Pagination/Pagination.js +1 -1
  78. package/lib/Pagination/index.js +12 -6
  79. package/lib/Popover.d.ts +4 -5
  80. package/lib/Popover.js +4 -5
  81. package/lib/Portal/index.js +16 -5
  82. package/lib/Position.d.ts +4 -4
  83. package/lib/SelectMenu/SelectMenu.d.ts +29 -189
  84. package/lib/SelectMenu/SelectMenu.js +1 -3
  85. package/lib/SelectMenu/SelectMenuDivider.d.ts +1 -2
  86. package/lib/SelectMenu/SelectMenuDivider.js +1 -1
  87. package/lib/SelectMenu/SelectMenuFilter.js +1 -1
  88. package/lib/SelectMenu/SelectMenuFooter.d.ts +1 -2
  89. package/lib/SelectMenu/SelectMenuFooter.js +1 -1
  90. package/lib/SelectMenu/SelectMenuHeader.d.ts +1 -2
  91. package/lib/SelectMenu/SelectMenuHeader.js +1 -1
  92. package/lib/SelectMenu/SelectMenuItem.d.ts +2 -3
  93. package/lib/SelectMenu/SelectMenuItem.js +1 -1
  94. package/lib/SelectMenu/SelectMenuList.d.ts +1 -2
  95. package/lib/SelectMenu/SelectMenuList.js +1 -1
  96. package/lib/SelectMenu/SelectMenuLoadingAnimation.d.ts +2 -2
  97. package/lib/SelectMenu/SelectMenuLoadingAnimation.js +3 -1
  98. package/lib/SelectMenu/SelectMenuModal.d.ts +2 -3
  99. package/lib/SelectMenu/SelectMenuModal.js +1 -1
  100. package/lib/SelectMenu/SelectMenuTab.d.ts +1 -2
  101. package/lib/SelectMenu/SelectMenuTab.js +1 -1
  102. package/lib/SelectMenu/SelectMenuTabPanel.d.ts +1 -2
  103. package/lib/SelectMenu/SelectMenuTabPanel.js +1 -1
  104. package/lib/SelectMenu/SelectMenuTabs.d.ts +1 -2
  105. package/lib/SelectMenu/SelectMenuTabs.js +1 -1
  106. package/lib/SelectMenu/hooks/useKeyboardNav.js +96 -80
  107. package/lib/SelectMenu/index.js +14 -7
  108. package/lib/SelectPanel/index.js +12 -4
  109. package/lib/SideNav.d.ts +11 -8
  110. package/lib/SideNav.js +8 -15
  111. package/lib/StateLabel.d.ts +1 -2
  112. package/lib/StateLabel.js +6 -5
  113. package/lib/StyledOcticon.d.ts +1 -2
  114. package/lib/StyledOcticon.js +1 -3
  115. package/lib/SubNav.d.ts +5 -11
  116. package/lib/SubNav.js +7 -12
  117. package/lib/TabNav.d.ts +3 -4
  118. package/lib/TabNav.js +2 -2
  119. package/lib/TextInput.d.ts +8 -1
  120. package/lib/TextInput.js +17 -5
  121. package/lib/TextInputWithTokens.d.ts +11 -3
  122. package/lib/Timeline.d.ts +19 -393
  123. package/lib/Timeline.js +16 -13
  124. package/lib/Token/Token.d.ts +1 -1
  125. package/lib/Token/index.js +30 -11
  126. package/lib/Tooltip.d.ts +1 -2
  127. package/lib/Tooltip.js +1 -1
  128. package/lib/Truncate.d.ts +1 -2
  129. package/lib/Truncate.js +1 -3
  130. package/lib/UnderlineNav.d.ts +2 -3
  131. package/lib/UnderlineNav.js +2 -2
  132. package/lib/_TextInputWrapper.d.ts +3 -0
  133. package/lib/_TextInputWrapper.js +18 -7
  134. package/lib/behaviors/anchoredPosition.js +234 -205
  135. package/lib/behaviors/focusTrap.js +157 -121
  136. package/lib/behaviors/focusZone.js +509 -434
  137. package/lib/behaviors/scrollIntoViewingArea.js +35 -18
  138. package/lib/constants.js +43 -39
  139. package/lib/drafts.js +30 -20
  140. package/lib/hooks/index.js +60 -16
  141. package/lib/hooks/useAnchoredPosition.js +40 -32
  142. package/lib/hooks/useCombinedRefs.js +36 -32
  143. package/lib/hooks/useDialog.js +96 -72
  144. package/lib/hooks/useFocusTrap.js +60 -43
  145. package/lib/hooks/useFocusZone.js +50 -54
  146. package/lib/hooks/useOnEscapePress.js +36 -25
  147. package/lib/hooks/useOpenAndCloseFocus.js +34 -22
  148. package/lib/hooks/useProvidedRefOrCreate.js +14 -10
  149. package/lib/hooks/useProvidedStateOrCreate.js +16 -13
  150. package/lib/hooks/useRenderForcingRef.js +17 -13
  151. package/lib/hooks/useResizeObserver.js +18 -15
  152. package/lib/hooks/useSafeTimeout.js +30 -22
  153. package/lib/hooks/useScrollFlash.js +23 -16
  154. package/lib/index.d.ts +2 -2
  155. package/lib/index.js +652 -165
  156. package/lib/polyfills/eventListenerSignal.js +45 -37
  157. package/lib/sx.js +22 -10
  158. package/lib/theme-preval.js +3169 -64
  159. package/lib/theme.js +12 -3
  160. package/lib/utils/iterateFocusableElements.js +85 -63
  161. package/lib/utils/testing.d.ts +28 -61
  162. package/lib/utils/testing.js +29 -0
  163. package/lib/utils/theme.js +47 -33
  164. package/lib/utils/types/AriaRole.js +1 -2
  165. package/lib/utils/types/ComponentProps.js +1 -2
  166. package/lib/utils/types/Flatten.js +1 -2
  167. package/lib/utils/types/KeyPaths.js +1 -2
  168. package/lib/utils/types/MandateProps.js +1 -16
  169. package/lib/utils/types/Merge.js +1 -2
  170. package/lib/utils/types/index.js +69 -16
  171. package/lib/utils/uniqueId.js +8 -5
  172. package/lib/utils/use-force-update.js +14 -8
  173. package/lib/utils/useIsomorphicLayoutEffect.js +11 -8
  174. package/lib/utils/userAgent.js +12 -8
  175. package/lib-esm/ActionList/Item.js +28 -53
  176. package/lib-esm/ActionList2/Group.d.ts +28 -2
  177. package/lib-esm/ActionList2/Group.js +52 -5
  178. package/lib-esm/ActionList2/List.d.ts +1 -1
  179. package/lib-esm/ActionList2/List.js +1 -2
  180. package/lib-esm/Autocomplete/Autocomplete.d.ts +11 -3
  181. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +11 -3
  182. package/lib-esm/Breadcrumbs.d.ts +8 -7
  183. package/lib-esm/Breadcrumbs.js +8 -13
  184. package/lib-esm/Button/Button.d.ts +2 -3
  185. package/lib-esm/Button/Button.js +2 -2
  186. package/lib-esm/Button/ButtonBase.d.ts +5 -8
  187. package/lib-esm/Button/ButtonBase.js +1 -3
  188. package/lib-esm/Button/ButtonClose.d.ts +3 -46
  189. package/lib-esm/Button/ButtonClose.js +2 -2
  190. package/lib-esm/Button/ButtonDanger.d.ts +2 -3
  191. package/lib-esm/Button/ButtonDanger.js +2 -2
  192. package/lib-esm/Button/ButtonInvisible.d.ts +2 -3
  193. package/lib-esm/Button/ButtonInvisible.js +2 -2
  194. package/lib-esm/Button/ButtonOutline.d.ts +2 -3
  195. package/lib-esm/Button/ButtonOutline.js +2 -2
  196. package/lib-esm/Button/ButtonPrimary.d.ts +2 -3
  197. package/lib-esm/Button/ButtonPrimary.js +2 -2
  198. package/lib-esm/Button/ButtonTableList.d.ts +1 -2
  199. package/lib-esm/Button/ButtonTableList.js +2 -2
  200. package/lib-esm/Checkbox.d.ts +29 -0
  201. package/lib-esm/Checkbox.js +44 -0
  202. package/lib-esm/CircleBadge.d.ts +4 -5
  203. package/lib-esm/CircleBadge.js +2 -2
  204. package/lib-esm/CircleOcticon.d.ts +1 -1
  205. package/lib-esm/CounterLabel.d.ts +1 -2
  206. package/lib-esm/CounterLabel.js +2 -2
  207. package/lib-esm/Dialog/Dialog.d.ts +5 -9
  208. package/lib-esm/Dialog/Dialog.js +12 -12
  209. package/lib-esm/Dialog.d.ts +4 -5
  210. package/lib-esm/Dialog.js +2 -2
  211. package/lib-esm/Dropdown.d.ts +10 -99
  212. package/lib-esm/Dropdown.js +4 -4
  213. package/lib-esm/DropdownMenu/DropdownButton.d.ts +3 -47
  214. package/lib-esm/DropdownMenu/DropdownButton.js +3 -1
  215. package/lib-esm/FilterList.d.ts +264 -303
  216. package/lib-esm/FilterList.js +3 -7
  217. package/lib-esm/FilteredSearch.d.ts +1 -2
  218. package/lib-esm/FilteredSearch.js +2 -2
  219. package/lib-esm/Flash.d.ts +1 -2
  220. package/lib-esm/Flash.js +2 -2
  221. package/lib-esm/FormGroup.d.ts +4 -5
  222. package/lib-esm/FormGroup.js +3 -3
  223. package/lib-esm/Header.d.ts +6 -7
  224. package/lib-esm/Header.js +5 -5
  225. package/lib-esm/Label.d.ts +1 -2
  226. package/lib-esm/Label.js +3 -4
  227. package/lib-esm/LabelGroup.d.ts +1 -2
  228. package/lib-esm/LabelGroup.js +2 -2
  229. package/lib-esm/Link.d.ts +1 -2
  230. package/lib-esm/Link.js +2 -2
  231. package/lib-esm/NewButton/button.js +31 -42
  232. package/lib-esm/Overlay.d.ts +14 -11
  233. package/lib-esm/Overlay.js +2 -3
  234. package/lib-esm/Pagehead.d.ts +1 -2
  235. package/lib-esm/Pagehead.js +2 -2
  236. package/lib-esm/Pagination/Pagination.js +2 -2
  237. package/lib-esm/Popover.d.ts +4 -5
  238. package/lib-esm/Popover.js +4 -5
  239. package/lib-esm/Position.d.ts +4 -4
  240. package/lib-esm/SelectMenu/SelectMenu.d.ts +29 -189
  241. package/lib-esm/SelectMenu/SelectMenu.js +1 -2
  242. package/lib-esm/SelectMenu/SelectMenuDivider.d.ts +1 -2
  243. package/lib-esm/SelectMenu/SelectMenuDivider.js +2 -2
  244. package/lib-esm/SelectMenu/SelectMenuFilter.js +2 -2
  245. package/lib-esm/SelectMenu/SelectMenuFooter.d.ts +1 -2
  246. package/lib-esm/SelectMenu/SelectMenuFooter.js +2 -2
  247. package/lib-esm/SelectMenu/SelectMenuHeader.d.ts +1 -2
  248. package/lib-esm/SelectMenu/SelectMenuHeader.js +2 -2
  249. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +2 -3
  250. package/lib-esm/SelectMenu/SelectMenuItem.js +2 -2
  251. package/lib-esm/SelectMenu/SelectMenuList.d.ts +1 -2
  252. package/lib-esm/SelectMenu/SelectMenuList.js +2 -2
  253. package/lib-esm/SelectMenu/SelectMenuLoadingAnimation.d.ts +2 -2
  254. package/lib-esm/SelectMenu/SelectMenuLoadingAnimation.js +3 -2
  255. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +2 -3
  256. package/lib-esm/SelectMenu/SelectMenuModal.js +2 -2
  257. package/lib-esm/SelectMenu/SelectMenuTab.d.ts +1 -2
  258. package/lib-esm/SelectMenu/SelectMenuTab.js +2 -2
  259. package/lib-esm/SelectMenu/SelectMenuTabPanel.d.ts +1 -2
  260. package/lib-esm/SelectMenu/SelectMenuTabPanel.js +2 -2
  261. package/lib-esm/SelectMenu/SelectMenuTabs.d.ts +1 -2
  262. package/lib-esm/SelectMenu/SelectMenuTabs.js +2 -2
  263. package/lib-esm/SideNav.d.ts +11 -8
  264. package/lib-esm/SideNav.js +8 -16
  265. package/lib-esm/StateLabel.d.ts +1 -2
  266. package/lib-esm/StateLabel.js +7 -6
  267. package/lib-esm/StyledOcticon.d.ts +1 -2
  268. package/lib-esm/StyledOcticon.js +1 -2
  269. package/lib-esm/SubNav.d.ts +5 -11
  270. package/lib-esm/SubNav.js +8 -13
  271. package/lib-esm/TabNav.d.ts +3 -4
  272. package/lib-esm/TabNav.js +3 -3
  273. package/lib-esm/TextInput.d.ts +8 -1
  274. package/lib-esm/TextInput.js +17 -5
  275. package/lib-esm/TextInputWithTokens.d.ts +11 -3
  276. package/lib-esm/Timeline.d.ts +19 -393
  277. package/lib-esm/Timeline.js +12 -13
  278. package/lib-esm/Token/Token.d.ts +1 -1
  279. package/lib-esm/Tooltip.d.ts +1 -2
  280. package/lib-esm/Tooltip.js +2 -2
  281. package/lib-esm/Truncate.d.ts +1 -2
  282. package/lib-esm/Truncate.js +1 -2
  283. package/lib-esm/UnderlineNav.d.ts +2 -3
  284. package/lib-esm/UnderlineNav.js +3 -3
  285. package/lib-esm/_TextInputWrapper.d.ts +3 -0
  286. package/lib-esm/_TextInputWrapper.js +18 -7
  287. package/lib-esm/index.d.ts +2 -2
  288. package/lib-esm/index.js +1 -1
  289. package/lib-esm/theme-preval.js +512 -366
  290. package/lib-esm/utils/testing.d.ts +28 -61
  291. package/lib-esm/utils/testing.js +24 -0
  292. package/package.json +5 -6
  293. package/lib/ActionList/Divider.jsx +0 -29
  294. package/lib/ActionList/Group.jsx +0 -23
  295. package/lib/ActionList/Header.jsx +0 -66
  296. package/lib/ActionList/Item.jsx +0 -311
  297. package/lib/ActionList/List.jsx +0 -138
  298. package/lib/ActionList2/Description.jsx +0 -29
  299. package/lib/ActionList2/Divider.jsx +0 -22
  300. package/lib/ActionList2/Group.jsx +0 -25
  301. package/lib/ActionList2/Header.jsx +0 -36
  302. package/lib/ActionList2/Item.jsx +0 -174
  303. package/lib/ActionList2/LinkItem.jsx +0 -28
  304. package/lib/ActionList2/List.jsx +0 -41
  305. package/lib/ActionList2/Selection.jsx +0 -50
  306. package/lib/ActionList2/Visuals.jsx +0 -48
  307. package/lib/ActionMenu.jsx +0 -73
  308. package/lib/AnchoredOverlay/AnchoredOverlay.jsx +0 -100
  309. package/lib/Autocomplete/Autocomplete.jsx +0 -100
  310. package/lib/Autocomplete/AutocompleteContext.jsx +0 -5
  311. package/lib/Autocomplete/AutocompleteInput.jsx +0 -113
  312. package/lib/Autocomplete/AutocompleteMenu.jsx +0 -190
  313. package/lib/Autocomplete/AutocompleteOverlay.jsx +0 -55
  314. package/lib/Avatar.jsx +0 -34
  315. package/lib/AvatarPair.jsx +0 -29
  316. package/lib/AvatarStack.jsx +0 -151
  317. package/lib/BaseStyles.jsx +0 -65
  318. package/lib/BorderBox.jsx +0 -18
  319. package/lib/Box.jsx +0 -10
  320. package/lib/BranchName.jsx +0 -20
  321. package/lib/Breadcrumbs.jsx +0 -74
  322. package/lib/Button/Button.jsx +0 -60
  323. package/lib/Button/ButtonBase.jsx +0 -36
  324. package/lib/Button/ButtonClose.jsx +0 -55
  325. package/lib/Button/ButtonDanger.jsx +0 -63
  326. package/lib/Button/ButtonGroup.jsx +0 -55
  327. package/lib/Button/ButtonInvisible.jsx +0 -52
  328. package/lib/Button/ButtonOutline.jsx +0 -63
  329. package/lib/Button/ButtonPrimary.jsx +0 -62
  330. package/lib/Button/ButtonStyles.jsx +0 -37
  331. package/lib/Button/ButtonTableList.jsx +0 -49
  332. package/lib/Caret.jsx +0 -93
  333. package/lib/CircleBadge.jsx +0 -43
  334. package/lib/CircleOcticon.jsx +0 -21
  335. package/lib/CounterLabel.jsx +0 -44
  336. package/lib/Details.jsx +0 -21
  337. package/lib/Dialog/ConfirmationDialog.jsx +0 -146
  338. package/lib/Dialog/Dialog.jsx +0 -273
  339. package/lib/Dialog.jsx +0 -131
  340. package/lib/Dropdown.jsx +0 -134
  341. package/lib/DropdownMenu/DropdownButton.jsx +0 -14
  342. package/lib/DropdownMenu/DropdownMenu.jsx +0 -70
  343. package/lib/EmojiPicker/EmojiPicker.d.ts +0 -15
  344. package/lib/EmojiPicker/EmojiPicker.js +0 -205
  345. package/lib/EmojiPicker/EmojiPicker.jsx +0 -125
  346. package/lib/EmojiPicker/EmojiPickerAnchor.d.ts +0 -0
  347. package/lib/EmojiPicker/EmojiPickerAnchor.js +0 -1
  348. package/lib/EmojiPicker/EmojiPickerAnchor.jsx +0 -1
  349. package/lib/EmojiPicker/EmojiPickerPanel.d.ts +0 -3
  350. package/lib/EmojiPicker/EmojiPickerPanel.js +0 -18
  351. package/lib/EmojiPicker/EmojiPickerPanel.jsx +0 -10
  352. package/lib/EmojiPicker/data.d.ts +0 -9
  353. package/lib/EmojiPicker/data.js +0 -7254
  354. package/lib/EmojiPicker/index.d.ts +0 -2
  355. package/lib/EmojiPicker/index.js +0 -8
  356. package/lib/FilterList.jsx +0 -63
  357. package/lib/FilteredActionList/FilteredActionList.jsx +0 -100
  358. package/lib/FilteredSearch.jsx +0 -29
  359. package/lib/Flash.jsx +0 -70
  360. package/lib/Flex.jsx +0 -15
  361. package/lib/FormGroup.jsx +0 -25
  362. package/lib/Grid.jsx +0 -15
  363. package/lib/Header.jsx +0 -90
  364. package/lib/Heading.jsx +0 -21
  365. package/lib/Label.jsx +0 -84
  366. package/lib/LabelGroup.jsx +0 -19
  367. package/lib/Link.jsx +0 -38
  368. package/lib/NewButton/button-counter.jsx +0 -14
  369. package/lib/NewButton/button.jsx +0 -278
  370. package/lib/Overlay.jsx +0 -156
  371. package/lib/Pagehead.jsx +0 -18
  372. package/lib/Pagination/Pagination.jsx +0 -163
  373. package/lib/Pagination/model.jsx +0 -174
  374. package/lib/PointerBox.jsx +0 -25
  375. package/lib/Popover.jsx +0 -210
  376. package/lib/Portal/Portal.jsx +0 -79
  377. package/lib/Position.jsx +0 -46
  378. package/lib/ProgressBar.jsx +0 -39
  379. package/lib/SelectMenu/SelectMenu.jsx +0 -114
  380. package/lib/SelectMenu/SelectMenuContext.jsx +0 -5
  381. package/lib/SelectMenu/SelectMenuDivider.jsx +0 -43
  382. package/lib/SelectMenu/SelectMenuFilter.jsx +0 -59
  383. package/lib/SelectMenu/SelectMenuFooter.jsx +0 -46
  384. package/lib/SelectMenu/SelectMenuHeader.jsx +0 -44
  385. package/lib/SelectMenu/SelectMenuItem.jsx +0 -143
  386. package/lib/SelectMenu/SelectMenuList.jsx +0 -60
  387. package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +0 -21
  388. package/lib/SelectMenu/SelectMenuModal.jsx +0 -119
  389. package/lib/SelectMenu/SelectMenuTab.jsx +0 -93
  390. package/lib/SelectMenu/SelectMenuTabPanel.jsx +0 -43
  391. package/lib/SelectMenu/SelectMenuTabs.jsx +0 -58
  392. package/lib/SelectPanel/SelectPanel.jsx +0 -105
  393. package/lib/SideNav.jsx +0 -177
  394. package/lib/Spinner.jsx +0 -35
  395. package/lib/StateLabel.jsx +0 -94
  396. package/lib/StyledOcticon.jsx +0 -20
  397. package/lib/SubNav.jsx +0 -104
  398. package/lib/TabNav.jsx +0 -60
  399. package/lib/Text.jsx +0 -14
  400. package/lib/TextInput.jsx +0 -23
  401. package/lib/TextInputWithTokens.jsx +0 -218
  402. package/lib/ThemeProvider.jsx +0 -130
  403. package/lib/Timeline.jsx +0 -124
  404. package/lib/Token/AvatarToken.jsx +0 -54
  405. package/lib/Token/IssueLabelToken.jsx +0 -125
  406. package/lib/Token/Token.jsx +0 -103
  407. package/lib/Token/TokenBase.jsx +0 -88
  408. package/lib/Token/_RemoveTokenButton.jsx +0 -108
  409. package/lib/Token/_TokenTextContainer.jsx +0 -49
  410. package/lib/Tooltip.jsx +0 -246
  411. package/lib/Truncate.jsx +0 -27
  412. package/lib/UnderlineNav.jsx +0 -90
  413. package/lib/_TextInputWrapper.jsx +0 -120
  414. package/lib/_UnstyledTextInput.jsx +0 -22
  415. package/lib/hooks/useDetails.jsx +0 -39
  416. package/lib/hooks/useOnOutsideClick.jsx +0 -61
  417. package/lib/hooks/useOverlay.jsx +0 -15
  418. package/lib/utils/create-slots.jsx +0 -65
  419. package/lib/utils/deprecate.jsx +0 -59
  420. package/lib/utils/isNumeric.jsx +0 -7
  421. package/lib/utils/ssr.jsx +0 -6
  422. package/lib/utils/test-deprecations.jsx +0 -20
  423. package/lib/utils/test-helpers.jsx +0 -8
  424. package/lib/utils/test-matchers.jsx +0 -100
  425. package/lib/utils/testing.jsx +0 -206
  426. package/lib-esm/EmojiPicker/EmojiPicker.d.ts +0 -15
  427. package/lib-esm/EmojiPicker/EmojiPicker.js +0 -184
  428. package/lib-esm/EmojiPicker/EmojiPickerAnchor.d.ts +0 -0
  429. package/lib-esm/EmojiPicker/EmojiPickerAnchor.js +0 -0
  430. package/lib-esm/EmojiPicker/EmojiPickerPanel.d.ts +0 -3
  431. package/lib-esm/EmojiPicker/EmojiPickerPanel.js +0 -8
  432. package/lib-esm/EmojiPicker/data.d.ts +0 -9
  433. package/lib-esm/EmojiPicker/data.js +0 -5434
  434. package/lib-esm/EmojiPicker/index.d.ts +0 -2
  435. package/lib-esm/EmojiPicker/index.js +0 -1
@@ -1,73 +0,0 @@
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
- exports.ActionMenu = void 0;
26
- const List_1 = require("./ActionList/List");
27
- const Item_1 = require("./ActionList/Item");
28
- const Divider_1 = require("./ActionList/Divider");
29
- const Button_1 = __importDefault(require("./Button"));
30
- const react_1 = __importStar(require("react"));
31
- const AnchoredOverlay_1 = require("./AnchoredOverlay");
32
- const useProvidedStateOrCreate_1 = require("./hooks/useProvidedStateOrCreate");
33
- const hooks_1 = require("./hooks");
34
- const ActionMenuItem = (props) => <Item_1.Item role="menuitem" {...props}/>;
35
- ActionMenuItem.displayName = 'ActionMenu.Item';
36
- const ActionMenuBase = ({ anchorContent, renderAnchor = (props) => <Button_1.default {...props}/>, anchorRef: externalAnchorRef, onAction, open, setOpen, overlayProps, items, ...listProps }) => {
37
- const [combinedOpenState, setCombinedOpenState] = useProvidedStateOrCreate_1.useProvidedStateOrCreate(open, setOpen, false);
38
- const anchorRef = hooks_1.useProvidedRefOrCreate(externalAnchorRef);
39
- const onOpen = react_1.useCallback(() => setCombinedOpenState(true), [setCombinedOpenState]);
40
- const onClose = react_1.useCallback(() => setCombinedOpenState(false), [setCombinedOpenState]);
41
- const renderMenuAnchor = react_1.useMemo(() => {
42
- if (renderAnchor === null) {
43
- return null;
44
- }
45
- return (props) => {
46
- return renderAnchor({
47
- 'aria-label': 'menu',
48
- children: anchorContent,
49
- ...props
50
- });
51
- };
52
- }, [anchorContent, renderAnchor]);
53
- const itemsToRender = react_1.useMemo(() => {
54
- return items.map(item => {
55
- return {
56
- ...item,
57
- role: 'menuitem',
58
- onAction: (props, event) => {
59
- const actionCallback = item.onAction ?? onAction;
60
- actionCallback?.(props, event);
61
- if (!event.defaultPrevented) {
62
- onClose();
63
- }
64
- }
65
- };
66
- });
67
- }, [items, onAction, onClose]);
68
- return (<AnchoredOverlay_1.AnchoredOverlay renderAnchor={renderMenuAnchor} anchorRef={anchorRef} open={combinedOpenState} onOpen={onOpen} onClose={onClose} overlayProps={overlayProps}>
69
- <List_1.List {...listProps} role="menu" items={itemsToRender}/>
70
- </AnchoredOverlay_1.AnchoredOverlay>);
71
- };
72
- ActionMenuBase.displayName = 'ActionMenu';
73
- exports.ActionMenu = Object.assign(ActionMenuBase, { Divider: Divider_1.Divider, Item: ActionMenuItem });
@@ -1,100 +0,0 @@
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
- exports.AnchoredOverlay = void 0;
26
- const react_1 = __importStar(require("react"));
27
- const Overlay_1 = __importDefault(require("../Overlay"));
28
- const useFocusTrap_1 = require("../hooks/useFocusTrap");
29
- const useFocusZone_1 = require("../hooks/useFocusZone");
30
- const hooks_1 = require("../hooks");
31
- const ssr_1 = require("@react-aria/ssr");
32
- /**
33
- * An `AnchoredOverlay` provides an anchor that will open a floating overlay positioned relative to the anchor.
34
- * The overlay can be opened and navigated using keyboard or mouse.
35
- */
36
- const AnchoredOverlay = ({ renderAnchor, anchorRef: externalAnchorRef, children, open, onOpen, onClose, height, width, overlayProps, focusTrapSettings, focusZoneSettings, side, align }) => {
37
- const anchorRef = hooks_1.useProvidedRefOrCreate(externalAnchorRef);
38
- const [overlayRef, updateOverlayRef] = hooks_1.useRenderForcingRef();
39
- const anchorId = ssr_1.useSSRSafeId();
40
- const onClickOutside = react_1.useCallback(() => onClose?.('click-outside'), [onClose]);
41
- const onEscape = react_1.useCallback(() => onClose?.('escape'), [onClose]);
42
- const onAnchorKeyDown = react_1.useCallback((event) => {
43
- if (!event.defaultPrevented) {
44
- if (!open && ['ArrowDown', 'ArrowUp', ' ', 'Enter'].includes(event.key)) {
45
- onOpen?.('anchor-key-press');
46
- event.preventDefault();
47
- }
48
- }
49
- }, [open, onOpen]);
50
- const onAnchorClick = react_1.useCallback((event) => {
51
- if (event.defaultPrevented || event.button !== 0) {
52
- return;
53
- }
54
- if (!open) {
55
- onOpen?.('anchor-click');
56
- }
57
- else {
58
- onClose?.('anchor-click');
59
- }
60
- }, [open, onOpen, onClose]);
61
- const { position } = hooks_1.useAnchoredPosition({
62
- anchorElementRef: anchorRef,
63
- floatingElementRef: overlayRef,
64
- side,
65
- align
66
- }, [overlayRef.current]);
67
- react_1.useEffect(() => {
68
- // ensure overlay ref gets cleared when closed, so position can reset between closing/re-opening
69
- if (!open && overlayRef.current) {
70
- updateOverlayRef(null);
71
- }
72
- }, [open, overlayRef, updateOverlayRef]);
73
- useFocusZone_1.useFocusZone({
74
- containerRef: overlayRef,
75
- disabled: !open || !position,
76
- ...focusZoneSettings
77
- });
78
- useFocusTrap_1.useFocusTrap({ containerRef: overlayRef, disabled: !open || !position, ...focusTrapSettings });
79
- return (<>
80
- {renderAnchor &&
81
- renderAnchor({
82
- ref: anchorRef,
83
- id: anchorId,
84
- 'aria-labelledby': anchorId,
85
- 'aria-haspopup': 'true',
86
- tabIndex: 0,
87
- onClick: onAnchorClick,
88
- onKeyDown: onAnchorKeyDown
89
- })}
90
- {open ? (<Overlay_1.default returnFocusRef={anchorRef} onClickOutside={onClickOutside} ignoreClickRefs={[anchorRef]} onEscape={onEscape} ref={updateOverlayRef} role="none" visibility={position ? 'visible' : 'hidden'} height={height} width={width} top={position?.top || 0} left={position?.left || 0} anchorSide={position?.anchorSide} {...overlayProps}>
91
- {children}
92
- </Overlay_1.default>) : null}
93
- </>);
94
- };
95
- exports.AnchoredOverlay = AnchoredOverlay;
96
- exports.AnchoredOverlay.displayName = 'AnchoredOverlay';
97
- exports.AnchoredOverlay.defaultProps = {
98
- side: 'outside-bottom',
99
- align: 'start'
100
- };
@@ -1,100 +0,0 @@
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 ssr_1 = require("@react-aria/ssr");
27
- const AutocompleteContext_1 = require("./AutocompleteContext");
28
- const AutocompleteInput_1 = __importDefault(require("./AutocompleteInput"));
29
- const AutocompleteMenu_1 = __importDefault(require("./AutocompleteMenu"));
30
- const AutocompleteOverlay_1 = __importDefault(require("./AutocompleteOverlay"));
31
- const initialState = {
32
- inputValue: '',
33
- showMenu: false,
34
- isMenuDirectlyActivated: false,
35
- autocompleteSuggestion: '',
36
- selectedItemLength: 0
37
- };
38
- const reducer = (state, action) => {
39
- const { type, payload } = action;
40
- switch (type) {
41
- case 'inputValue':
42
- return { ...state, inputValue: payload };
43
- case 'showMenu':
44
- return { ...state, showMenu: payload };
45
- case 'isMenuDirectlyActivated':
46
- return { ...state, isMenuDirectlyActivated: payload };
47
- case 'autocompleteSuggestion':
48
- return { ...state, autocompleteSuggestion: payload };
49
- case 'selectedItemLength':
50
- return { ...state, selectedItemLength: payload };
51
- default:
52
- return state;
53
- }
54
- };
55
- const Autocomplete = ({ children, id: idProp }) => {
56
- const activeDescendantRef = react_1.useRef(null);
57
- const scrollContainerRef = react_1.useRef(null);
58
- const inputRef = react_1.useRef(null);
59
- const [state, dispatch] = react_1.useReducer(reducer, initialState);
60
- const { inputValue, showMenu, autocompleteSuggestion, isMenuDirectlyActivated, selectedItemLength } = state;
61
- const setInputValue = react_1.useCallback((value) => {
62
- dispatch({ type: 'inputValue', payload: value });
63
- }, []);
64
- const setShowMenu = react_1.useCallback((value) => {
65
- dispatch({ type: 'showMenu', payload: value });
66
- }, []);
67
- const setAutocompleteSuggestion = react_1.useCallback((value) => {
68
- dispatch({ type: 'autocompleteSuggestion', payload: value });
69
- }, []);
70
- const setIsMenuDirectlyActivated = react_1.useCallback((value) => {
71
- dispatch({ type: 'isMenuDirectlyActivated', payload: value });
72
- }, []);
73
- const setSelectedItemLength = react_1.useCallback((value) => {
74
- dispatch({ type: 'selectedItemLength', payload: value });
75
- }, []);
76
- const id = ssr_1.useSSRSafeId(idProp);
77
- return (<AutocompleteContext_1.AutocompleteContext.Provider value={{
78
- activeDescendantRef,
79
- autocompleteSuggestion,
80
- id,
81
- inputRef,
82
- inputValue,
83
- isMenuDirectlyActivated,
84
- scrollContainerRef,
85
- selectedItemLength,
86
- setAutocompleteSuggestion,
87
- setInputValue,
88
- setIsMenuDirectlyActivated,
89
- setShowMenu,
90
- setSelectedItemLength,
91
- showMenu
92
- }}>
93
- {children}
94
- </AutocompleteContext_1.AutocompleteContext.Provider>);
95
- };
96
- exports.default = Object.assign(Autocomplete, {
97
- Input: AutocompleteInput_1.default,
98
- Menu: AutocompleteMenu_1.default,
99
- Overlay: AutocompleteOverlay_1.default
100
- });
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AutocompleteContext = void 0;
4
- const react_1 = require("react");
5
- exports.AutocompleteContext = react_1.createContext(null);
@@ -1,113 +0,0 @@
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 AutocompleteContext_1 = require("./AutocompleteContext");
27
- const TextInput_1 = __importDefault(require("../TextInput"));
28
- const useCombinedRefs_1 = require("../hooks/useCombinedRefs");
29
- const AutocompleteInput = react_1.default.forwardRef(({ as: Component = TextInput_1.default, onFocus, onBlur, onChange, onKeyDown, onKeyUp, onKeyPress, value, ...props }, forwardedRef) => {
30
- const autocompleteContext = react_1.useContext(AutocompleteContext_1.AutocompleteContext);
31
- if (autocompleteContext === null) {
32
- throw new Error('AutocompleteContext returned null values');
33
- }
34
- const { activeDescendantRef, autocompleteSuggestion = '', id, inputRef, inputValue = '', isMenuDirectlyActivated, setInputValue, setShowMenu, showMenu } = autocompleteContext;
35
- const combinedInputRef = useCombinedRefs_1.useCombinedRefs(inputRef, forwardedRef);
36
- const [highlightRemainingText, setHighlightRemainingText] = react_1.useState(true);
37
- const handleInputFocus = react_1.useCallback(event => {
38
- onFocus && onFocus(event);
39
- setShowMenu(true);
40
- }, [onFocus, setShowMenu]);
41
- const handleInputBlur = react_1.useCallback(event => {
42
- onBlur && onBlur(event);
43
- // HACK: wait a tick and check the focused element before hiding the autocomplete menu
44
- // this prevents the menu from hiding when the user is clicking an option in the Autoselect.Menu,
45
- // but still hides the menu when the user blurs the input by tabbing out or clicking somewhere else on the page
46
- setTimeout(() => {
47
- if (document.activeElement !== combinedInputRef.current) {
48
- setShowMenu(false);
49
- }
50
- }, 0);
51
- }, [onBlur, setShowMenu, combinedInputRef]);
52
- const handleInputChange = react_1.useCallback(event => {
53
- onChange && onChange(event);
54
- setInputValue(event.currentTarget.value);
55
- if (!showMenu) {
56
- setShowMenu(true);
57
- }
58
- }, [onChange, setInputValue, setShowMenu, showMenu]);
59
- const handleInputKeyDown = react_1.useCallback(event => {
60
- onKeyDown && onKeyDown(event);
61
- if (event.key === 'Backspace') {
62
- setHighlightRemainingText(false);
63
- }
64
- if (event.key === 'Escape' && inputRef.current?.value) {
65
- setInputValue('');
66
- inputRef.current.value = '';
67
- }
68
- }, [inputRef, setInputValue, setHighlightRemainingText, onKeyDown]);
69
- const handleInputKeyUp = react_1.useCallback(event => {
70
- onKeyUp && onKeyUp(event);
71
- if (event.key === 'Backspace') {
72
- setHighlightRemainingText(true);
73
- }
74
- }, [setHighlightRemainingText, onKeyUp]);
75
- const onInputKeyPress = react_1.useCallback(event => {
76
- onKeyPress && onKeyPress(event);
77
- if (showMenu && event.key === 'Enter' && activeDescendantRef.current) {
78
- event.preventDefault();
79
- event.nativeEvent.stopImmediatePropagation();
80
- // Forward Enter key press to active descendant so that item gets activated
81
- const activeDescendantEvent = new KeyboardEvent(event.type, event.nativeEvent);
82
- activeDescendantRef.current.dispatchEvent(activeDescendantEvent);
83
- }
84
- }, [activeDescendantRef, showMenu, onKeyPress]);
85
- react_1.useEffect(() => {
86
- if (!inputRef.current) {
87
- return;
88
- }
89
- // resets input value to being empty after a selection has been made
90
- if (!autocompleteSuggestion) {
91
- inputRef.current.value = inputValue;
92
- }
93
- // TODO: fix bug where this function prevents `onChange` from being triggered if the highlighted item text
94
- // is the same as what I'm typing
95
- // e.g.: typing 'tw' highights 'two', but when I 'two', the text input change does not get triggered
96
- if (highlightRemainingText && autocompleteSuggestion && (inputValue || isMenuDirectlyActivated)) {
97
- inputRef.current.value = autocompleteSuggestion;
98
- if (autocompleteSuggestion.toLowerCase().indexOf(inputValue.toLowerCase()) === 0) {
99
- inputRef.current.setSelectionRange(inputValue.length, autocompleteSuggestion.length);
100
- }
101
- }
102
- // calling this useEffeect when `highlightRemainingText` changes breaks backspace functionality
103
- // eslint-disable-next-line react-hooks/exhaustive-deps
104
- }, [autocompleteSuggestion, inputValue, inputRef, isMenuDirectlyActivated]);
105
- react_1.useEffect(() => {
106
- if (value) {
107
- setInputValue(value.toString());
108
- }
109
- }, [value, setInputValue]);
110
- return (<Component onFocus={handleInputFocus} onBlur={handleInputBlur} onChange={handleInputChange} onKeyDown={handleInputKeyDown} onKeyPress={onInputKeyPress} onKeyUp={handleInputKeyUp} ref={combinedInputRef} aria-controls={`${id}-listbox`} aria-autocomplete="both" role="combobox" aria-expanded={showMenu} aria-haspopup="listbox" aria-owns={`${id}-listbox`} autocomplete="off" {...props}/>);
111
- });
112
- AutocompleteInput.displayName = 'AutocompleteInput';
113
- exports.default = AutocompleteInput;
@@ -1,190 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- const react_1 = __importStar(require("react"));
23
- const ActionList_1 = require("../ActionList");
24
- const useFocusZone_1 = require("../hooks/useFocusZone");
25
- const __1 = require("../");
26
- const AutocompleteContext_1 = require("./AutocompleteContext");
27
- const octicons_react_1 = require("@primer/octicons-react");
28
- const uniqueId_1 = require("../utils/uniqueId");
29
- const scrollIntoViewingArea_1 = require("../behaviors/scrollIntoViewingArea");
30
- const getDefaultSortFn = (isItemSelectedFn) => (itemIdA, itemIdB) => isItemSelectedFn(itemIdA) === isItemSelectedFn(itemIdB) ? 0 : isItemSelectedFn(itemIdA) ? -1 : 1;
31
- function getDefaultItemFilter(filterValue) {
32
- return function (item, _i) {
33
- return Boolean(item.text?.toLowerCase().startsWith(filterValue.toLowerCase()));
34
- };
35
- }
36
- function getDefaultOnSelectionChange(setInputValueFn) {
37
- return function (itemOrItems) {
38
- const { text = '' } = Array.isArray(itemOrItems) ? itemOrItems.slice(-1)[0] : itemOrItems;
39
- setInputValueFn(text);
40
- };
41
- }
42
- const isItemSelected = (itemId, selectedItemIds) => selectedItemIds.includes(itemId);
43
- function getItemById(itemId, items) {
44
- return items.find(item => item.id === itemId);
45
- }
46
- function AutocompleteMenu(props) {
47
- const autocompleteContext = react_1.useContext(AutocompleteContext_1.AutocompleteContext);
48
- if (autocompleteContext === null) {
49
- throw new Error('AutocompleteContext returned null values');
50
- }
51
- const { activeDescendantRef, id, inputRef, inputValue = '', scrollContainerRef, setAutocompleteSuggestion, setShowMenu, setInputValue, setIsMenuDirectlyActivated, setSelectedItemLength, showMenu } = autocompleteContext;
52
- const { items, selectedItemIds, sortOnCloseFn, emptyStateText, addNewItem, loading, selectionVariant, filterFn, 'aria-labelledby': ariaLabelledBy, onOpenChange, onSelectedChange, customScrollContainerRef } = props;
53
- const listContainerRef = react_1.useRef(null);
54
- const [highlightedItem, setHighlightedItem] = react_1.useState();
55
- const [sortedItemIds, setSortedItemIds] = react_1.useState(items.map(({ id: itemId }) => itemId));
56
- const selectableItems = react_1.useMemo(() => items.map(selectableItem => {
57
- return {
58
- ...selectableItem,
59
- role: 'option',
60
- id: selectableItem.id,
61
- selected: selectionVariant === 'multiple' ? selectedItemIds.includes(selectableItem.id) : undefined,
62
- onAction: (item) => {
63
- const otherSelectedItemIds = selectedItemIds.filter(selectedItemId => selectedItemId !== item.id);
64
- const newSelectedItemIds = selectedItemIds.includes(item.id)
65
- ? otherSelectedItemIds
66
- : [...otherSelectedItemIds, item.id];
67
- const onSelectedChangeFn = onSelectedChange ? onSelectedChange : getDefaultOnSelectionChange(setInputValue);
68
- onSelectedChangeFn(newSelectedItemIds.map(newSelectedItemId => getItemById(newSelectedItemId, items)));
69
- if (selectionVariant === 'multiple') {
70
- setInputValue('');
71
- setAutocompleteSuggestion('');
72
- }
73
- else {
74
- setShowMenu(false);
75
- inputRef.current?.setSelectionRange(inputRef.current.value.length, inputRef.current.value.length);
76
- }
77
- }
78
- };
79
- }), [
80
- items,
81
- selectedItemIds,
82
- inputRef,
83
- onSelectedChange,
84
- selectionVariant,
85
- setAutocompleteSuggestion,
86
- setInputValue,
87
- setShowMenu
88
- ]);
89
- const itemSortOrderData = react_1.useMemo(() => sortedItemIds.reduce((acc, curr, i) => {
90
- acc[curr] = i;
91
- return acc;
92
- }, {}), [sortedItemIds]);
93
- const sortedAndFilteredItemsToRender = react_1.useMemo(() => selectableItems
94
- .filter(filterFn ? filterFn : getDefaultItemFilter(inputValue))
95
- .sort((a, b) => itemSortOrderData[a.id] - itemSortOrderData[b.id]), [selectableItems, itemSortOrderData, filterFn, inputValue]);
96
- const allItemsToRender = react_1.useMemo(() => [
97
- // sorted and filtered selectable items
98
- ...sortedAndFilteredItemsToRender,
99
- // menu item used for creating a token from whatever is in the text input
100
- ...(addNewItem
101
- ? [
102
- {
103
- ...addNewItem,
104
- leadingVisual: () => <octicons_react_1.PlusIcon />,
105
- onAction: (item) => {
106
- // TODO: make it possible to pass a leadingVisual when using `addNewItem`
107
- addNewItem.handleAddItem({ ...item, id: item.id || uniqueId_1.uniqueId(), leadingVisual: undefined });
108
- if (selectionVariant === 'multiple') {
109
- setInputValue('');
110
- setAutocompleteSuggestion('');
111
- }
112
- }
113
- }
114
- ]
115
- : [])
116
- ], [sortedAndFilteredItemsToRender, addNewItem, setAutocompleteSuggestion, selectionVariant, setInputValue]);
117
- useFocusZone_1.useFocusZone({
118
- containerRef: listContainerRef,
119
- focusOutBehavior: 'wrap',
120
- focusableElementFilter: element => {
121
- return !(element instanceof HTMLInputElement);
122
- },
123
- activeDescendantFocus: inputRef,
124
- onActiveDescendantChanged: (current, _previous, directlyActivated) => {
125
- activeDescendantRef.current = current || null;
126
- if (current) {
127
- const selectedItem = selectableItems.find(item => item.id.toString() === current.getAttribute('data-id'));
128
- setHighlightedItem(selectedItem);
129
- setIsMenuDirectlyActivated(directlyActivated);
130
- }
131
- if (current && customScrollContainerRef && customScrollContainerRef.current && directlyActivated) {
132
- scrollIntoViewingArea_1.scrollIntoViewingArea(current, customScrollContainerRef.current);
133
- }
134
- else if (current && scrollContainerRef.current && directlyActivated) {
135
- scrollIntoViewingArea_1.scrollIntoViewingArea(current, scrollContainerRef.current);
136
- }
137
- }
138
- }, [loading]);
139
- react_1.useEffect(() => {
140
- if (highlightedItem?.text?.startsWith(inputValue) && !selectedItemIds.includes(highlightedItem.id)) {
141
- setAutocompleteSuggestion(highlightedItem.text);
142
- }
143
- else {
144
- setAutocompleteSuggestion('');
145
- }
146
- }, [highlightedItem, inputValue, selectedItemIds, setAutocompleteSuggestion]);
147
- react_1.useEffect(() => {
148
- const itemIdSortResult = [...sortedItemIds].sort(sortOnCloseFn ? sortOnCloseFn : getDefaultSortFn(itemId => isItemSelected(itemId, selectedItemIds)));
149
- const sortResultMatchesState = itemIdSortResult.length === sortedItemIds.length &&
150
- itemIdSortResult.every((element, index) => element === sortedItemIds[index]);
151
- if (showMenu === false && !sortResultMatchesState) {
152
- setSortedItemIds(itemIdSortResult);
153
- }
154
- onOpenChange && onOpenChange(Boolean(showMenu));
155
- }, [showMenu, onOpenChange, selectedItemIds, sortOnCloseFn, sortedItemIds]);
156
- react_1.useEffect(() => {
157
- if (selectedItemIds.length) {
158
- setSelectedItemLength(selectedItemIds.length);
159
- }
160
- }, [selectedItemIds, setSelectedItemLength]);
161
- return (<__1.Box sx={!showMenu
162
- ? {
163
- // visually hides this label for sighted users
164
- position: 'absolute',
165
- width: '1px',
166
- height: '1px',
167
- padding: '0',
168
- margin: '-1px',
169
- overflow: 'hidden',
170
- clip: 'rect(0, 0, 0, 0)',
171
- whiteSpace: 'nowrap',
172
- borderWidth: '0'
173
- }
174
- : {}}>
175
- {loading ? (<__1.Box p={3} display="flex" justifyContent="center">
176
- <__1.Spinner />
177
- </__1.Box>) : (<div ref={listContainerRef}>
178
- {allItemsToRender.length ? (<ActionList_1.ActionList selectionVariant="multiple"
179
- // have to typecast to `ItemProps` because we have an extra property
180
- // on `items` for Autocomplete: `metadata`
181
- items={allItemsToRender} role="listbox" id={`${id}-listbox`} aria-labelledby={ariaLabelledBy}/>) : (<__1.Box p={3}>{emptyStateText}</__1.Box>)}
182
- </div>)}
183
- </__1.Box>);
184
- }
185
- AutocompleteMenu.defaultProps = {
186
- emptyStateText: 'No selectable options',
187
- selectionVariant: 'single'
188
- };
189
- AutocompleteMenu.displayName = 'AutocompleteMenu';
190
- exports.default = AutocompleteMenu;
@@ -1,55 +0,0 @@
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 hooks_1 = require("../hooks");
27
- const Overlay_1 = __importDefault(require("../Overlay"));
28
- const AutocompleteContext_1 = require("./AutocompleteContext");
29
- const useCombinedRefs_1 = require("../hooks/useCombinedRefs");
30
- function AutocompleteOverlay({ menuAnchorRef, overlayProps, children }) {
31
- const autocompleteContext = react_1.useContext(AutocompleteContext_1.AutocompleteContext);
32
- if (autocompleteContext === null) {
33
- throw new Error('AutocompleteContext returned null values');
34
- }
35
- const { inputRef, scrollContainerRef, selectedItemLength, setShowMenu, showMenu = false } = autocompleteContext;
36
- const { floatingElementRef, position } = hooks_1.useAnchoredPosition({
37
- side: 'outside-bottom',
38
- align: 'start',
39
- anchorElementRef: menuAnchorRef ? menuAnchorRef : inputRef
40
- }, [showMenu, selectedItemLength]);
41
- const combinedOverlayRef = useCombinedRefs_1.useCombinedRefs(scrollContainerRef, floatingElementRef);
42
- const closeOptionList = react_1.useCallback(() => {
43
- setShowMenu(false);
44
- }, [setShowMenu]);
45
- if (typeof window === 'undefined') {
46
- return null;
47
- }
48
- return (<Overlay_1.default returnFocusRef={inputRef} preventFocusOnOpen={true} onClickOutside={closeOptionList} onEscape={closeOptionList} ref={combinedOverlayRef} top={position?.top} left={position?.left} visibility={showMenu ? 'visible' : 'hidden'} sx={{
49
- overflow: 'auto'
50
- }} {...overlayProps}>
51
- {children}
52
- </Overlay_1.default>);
53
- }
54
- AutocompleteOverlay.displayName = 'AutocompleteOverlay';
55
- exports.default = AutocompleteOverlay;