@primer/components 0.0.0-20219922627 → 0.0.0-2022530201059

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 (531) hide show
  1. package/CHANGELOG.md +105 -492
  2. package/README.md +16 -16
  3. package/codemods/lib/modifyProps.js +7 -9
  4. package/codemods/lib/prettify.js +1 -1
  5. package/codemods/lib/replaceImportSource.js +5 -5
  6. package/dist/browser.esm.js +801 -1115
  7. package/dist/browser.esm.js.map +1 -1
  8. package/dist/browser.umd.js +815 -1134
  9. package/dist/browser.umd.js.map +1 -1
  10. package/index.d.ts +940 -0
  11. package/lib/AvatarPair.js +5 -6
  12. package/lib/AvatarStack.js +10 -10
  13. package/lib/BaseStyles.js +19 -18
  14. package/lib/BorderBox.js +5 -4
  15. package/lib/Box.js +2 -2
  16. package/lib/BranchName.js +1 -1
  17. package/lib/{Breadcrumbs.js → Breadcrumb.js} +23 -33
  18. package/lib/Button/Button.js +3 -3
  19. package/lib/Button/ButtonClose.js +4 -4
  20. package/lib/Button/ButtonDanger.js +2 -2
  21. package/lib/Button/ButtonInvisible.js +3 -3
  22. package/lib/Button/ButtonOutline.js +2 -2
  23. package/lib/Button/ButtonPrimary.js +2 -2
  24. package/lib/Button/ButtonTableList.js +1 -1
  25. package/lib/CircleBadge.js +1 -1
  26. package/lib/CircleOcticon.js +7 -9
  27. package/lib/CounterLabel.js +2 -2
  28. package/lib/Dialog.js +14 -13
  29. package/lib/Dropdown.js +2 -2
  30. package/lib/DropdownStyles.js +6 -6
  31. package/lib/FilterList.js +1 -1
  32. package/lib/Flash.js +1 -1
  33. package/lib/Flex.js +0 -3
  34. package/lib/Grid.js +3 -4
  35. package/lib/Header.js +2 -3
  36. package/lib/Label.js +4 -4
  37. package/lib/Link.js +12 -1
  38. package/lib/Overlay.js +35 -120
  39. package/lib/Pagehead.js +1 -1
  40. package/lib/Pagination/Pagination.js +2 -3
  41. package/lib/Popover.js +3 -3
  42. package/lib/Portal/Portal.js +12 -20
  43. package/lib/Position.js +27 -46
  44. package/lib/ProgressBar.js +1 -1
  45. package/lib/SelectMenu/SelectMenu.js +4 -4
  46. package/lib/SelectMenu/SelectMenuContext.js +1 -1
  47. package/lib/SelectMenu/SelectMenuDivider.js +3 -3
  48. package/lib/SelectMenu/SelectMenuFilter.js +6 -6
  49. package/lib/SelectMenu/SelectMenuFooter.js +3 -3
  50. package/lib/SelectMenu/SelectMenuHeader.js +2 -2
  51. package/lib/SelectMenu/SelectMenuItem.js +4 -4
  52. package/lib/SelectMenu/SelectMenuList.js +3 -3
  53. package/lib/SelectMenu/SelectMenuLoadingAnimation.js +15 -4
  54. package/lib/SelectMenu/SelectMenuModal.js +7 -7
  55. package/lib/SelectMenu/SelectMenuTab.js +3 -3
  56. package/lib/SelectMenu/SelectMenuTabPanel.js +3 -3
  57. package/lib/SelectMenu/SelectMenuTabs.js +2 -2
  58. package/lib/SelectMenu/hooks/useKeyboardNav.js +0 -2
  59. package/lib/SideNav.js +12 -20
  60. package/lib/StateLabel.js +4 -4
  61. package/lib/SubNav.js +3 -5
  62. package/lib/TabNav.js +3 -3
  63. package/lib/TextInput.js +19 -24
  64. package/lib/ThemeProvider.js +15 -32
  65. package/lib/Timeline.js +29 -24
  66. package/lib/Tooltip.js +1 -2
  67. package/lib/UnderlineNav.js +2 -2
  68. package/lib/behaviors/anchoredPosition.js +9 -17
  69. package/lib/behaviors/focusTrap.js +14 -32
  70. package/lib/behaviors/focusZone.js +148 -218
  71. package/lib/constants.js +2 -3
  72. package/lib/hooks/index.js +1 -9
  73. package/lib/hooks/useAnchoredPosition.js +4 -11
  74. package/lib/hooks/useDialog.js +1 -1
  75. package/lib/hooks/useFocusTrap.js +8 -26
  76. package/lib/hooks/useFocusZone.js +7 -7
  77. package/lib/hooks/useMouseIntent.js +58 -0
  78. package/lib/hooks/useOnEscapePress.js +10 -53
  79. package/lib/hooks/useOnOutsideClick.js +35 -62
  80. package/lib/hooks/useOpenAndCloseFocus.js +1 -1
  81. package/lib/hooks/useOverlay.js +17 -5
  82. package/lib/hooks/useSafeTimeout.js +0 -1
  83. package/lib/index.js +12 -76
  84. package/lib/polyfills/eventListenerSignal.js +1 -6
  85. package/lib/stories/Button.stories.js +114 -0
  86. package/lib/stories/Overlay.stories.js +102 -0
  87. package/lib/stories/Portal.stories.js +108 -0
  88. package/lib/stories/ThemeProvider.stories.js +95 -0
  89. package/lib/stories/useAnchoredPosition.stories.js +349 -0
  90. package/lib/stories/useFocusTrap.stories.js +278 -0
  91. package/lib/stories/useFocusZone.stories.js +490 -0
  92. package/lib/theme-preval.js +2057 -5148
  93. package/lib/utils/deprecate.js +2 -3
  94. package/lib/utils/isNumeric.js +0 -1
  95. package/lib/utils/iterateFocusableElements.js +1 -1
  96. package/lib/utils/test-deprecations.js +0 -1
  97. package/lib/utils/test-matchers.js +12 -3
  98. package/lib/utils/testing.js +4 -4
  99. package/lib/utils/theme.js +1 -1
  100. package/lib/utils/uniqueId.js +0 -1
  101. package/lib-esm/AvatarPair.js +5 -6
  102. package/lib-esm/AvatarStack.js +11 -11
  103. package/lib-esm/BaseStyles.js +16 -16
  104. package/lib-esm/BorderBox.js +3 -5
  105. package/lib-esm/Box.js +2 -2
  106. package/lib-esm/BranchName.js +1 -1
  107. package/lib-esm/{Breadcrumbs.js → Breadcrumb.js} +22 -32
  108. package/lib-esm/Button/Button.js +1 -1
  109. package/lib-esm/Button/ButtonClose.js +2 -2
  110. package/lib-esm/Button/ButtonInvisible.js +1 -1
  111. package/lib-esm/Button/ButtonTableList.js +1 -1
  112. package/lib-esm/CircleBadge.js +1 -1
  113. package/lib-esm/CircleOcticon.js +6 -9
  114. package/lib-esm/CounterLabel.js +2 -2
  115. package/lib-esm/Dialog.js +12 -10
  116. package/lib-esm/Dropdown.js +2 -2
  117. package/lib-esm/DropdownStyles.js +6 -6
  118. package/lib-esm/FilterList.js +1 -1
  119. package/lib-esm/Flash.js +1 -1
  120. package/lib-esm/Flex.js +0 -4
  121. package/lib-esm/Grid.js +2 -5
  122. package/lib-esm/Header.js +0 -1
  123. package/lib-esm/Label.js +2 -2
  124. package/lib-esm/Link.js +12 -1
  125. package/lib-esm/Overlay.js +37 -115
  126. package/lib-esm/Pagehead.js +1 -1
  127. package/lib-esm/Pagination/Pagination.js +2 -3
  128. package/lib-esm/Popover.js +3 -3
  129. package/lib-esm/Portal/Portal.js +12 -19
  130. package/lib-esm/Portal/index.js +1 -1
  131. package/lib-esm/Position.js +20 -45
  132. package/lib-esm/ProgressBar.js +1 -1
  133. package/lib-esm/SelectMenu/SelectMenu.js +3 -3
  134. package/lib-esm/SelectMenu/SelectMenuContext.js +1 -1
  135. package/lib-esm/SelectMenu/SelectMenuDivider.js +1 -1
  136. package/lib-esm/SelectMenu/SelectMenuFilter.js +4 -4
  137. package/lib-esm/SelectMenu/SelectMenuFooter.js +1 -1
  138. package/lib-esm/SelectMenu/SelectMenuHeader.js +2 -2
  139. package/lib-esm/SelectMenu/SelectMenuItem.js +2 -2
  140. package/lib-esm/SelectMenu/SelectMenuList.js +1 -1
  141. package/lib-esm/SelectMenu/SelectMenuLoadingAnimation.js +10 -5
  142. package/lib-esm/SelectMenu/SelectMenuModal.js +5 -5
  143. package/lib-esm/SelectMenu/SelectMenuTab.js +1 -1
  144. package/lib-esm/SelectMenu/SelectMenuTabPanel.js +1 -1
  145. package/lib-esm/SelectMenu/hooks/useKeyboardNav.js +0 -2
  146. package/lib-esm/SideNav.js +7 -16
  147. package/lib-esm/StateLabel.js +4 -4
  148. package/lib-esm/SubNav.js +4 -7
  149. package/lib-esm/TabNav.js +4 -5
  150. package/lib-esm/TextInput.js +17 -23
  151. package/lib-esm/ThemeProvider.js +16 -31
  152. package/lib-esm/Timeline.js +24 -19
  153. package/lib-esm/Tooltip.js +1 -2
  154. package/lib-esm/UnderlineNav.js +3 -4
  155. package/lib-esm/behaviors/anchoredPosition.js +9 -17
  156. package/lib-esm/behaviors/focusTrap.js +14 -32
  157. package/lib-esm/behaviors/focusZone.js +148 -213
  158. package/lib-esm/constants.js +1 -2
  159. package/lib-esm/hooks/index.js +1 -2
  160. package/lib-esm/hooks/useAnchoredPosition.js +5 -10
  161. package/lib-esm/hooks/useDialog.js +1 -1
  162. package/lib-esm/hooks/useFocusTrap.js +8 -25
  163. package/lib-esm/hooks/useFocusZone.js +5 -5
  164. package/lib-esm/hooks/useMouseIntent.js +50 -0
  165. package/lib-esm/hooks/useOnEscapePress.js +10 -53
  166. package/lib-esm/hooks/useOnOutsideClick.js +37 -62
  167. package/lib-esm/hooks/useOpenAndCloseFocus.js +1 -1
  168. package/lib-esm/hooks/useOverlay.js +16 -5
  169. package/lib-esm/hooks/useSafeTimeout.js +0 -1
  170. package/lib-esm/index.js +10 -19
  171. package/lib-esm/polyfills/eventListenerSignal.js +1 -6
  172. package/lib-esm/stories/Button.stories.js +79 -0
  173. package/lib-esm/stories/Overlay.stories.js +80 -0
  174. package/lib-esm/stories/Portal.stories.js +72 -0
  175. package/lib-esm/stories/ThemeProvider.stories.js +76 -0
  176. package/lib-esm/stories/useAnchoredPosition.stories.js +311 -0
  177. package/lib-esm/stories/useFocusTrap.stories.js +234 -0
  178. package/lib-esm/stories/useFocusZone.stories.js +445 -0
  179. package/lib-esm/theme-preval.js +2057 -5148
  180. package/lib-esm/utils/deprecate.js +2 -3
  181. package/lib-esm/utils/isNumeric.js +0 -1
  182. package/lib-esm/utils/iterateFocusableElements.js +1 -1
  183. package/lib-esm/utils/test-deprecations.js +1 -1
  184. package/lib-esm/utils/test-matchers.js +11 -3
  185. package/lib-esm/utils/testing.js +6 -6
  186. package/lib-esm/utils/theme.js +1 -1
  187. package/lib-esm/utils/types.js +0 -1
  188. package/lib-esm/utils/uniqueId.js +0 -1
  189. package/package.json +95 -103
  190. package/codemods/__tests__/deprecateUtilityComponents.js +0 -200
  191. package/codemods/__tests__/removeSystemProps.js +0 -225
  192. package/codemods/deprecateUtilityComponents.js +0 -111
  193. package/codemods/removeSystemProps.js +0 -312
  194. package/lib/ActionList/Divider.d.ts +0 -9
  195. package/lib/ActionList/Divider.js +0 -40
  196. package/lib/ActionList/Group.d.ts +0 -28
  197. package/lib/ActionList/Group.js +0 -35
  198. package/lib/ActionList/Header.d.ts +0 -29
  199. package/lib/ActionList/Header.js +0 -51
  200. package/lib/ActionList/Item.d.ts +0 -92
  201. package/lib/ActionList/Item.js +0 -288
  202. package/lib/ActionList/List.d.ts +0 -87
  203. package/lib/ActionList/List.js +0 -199
  204. package/lib/ActionList/index.d.ts +0 -17
  205. package/lib/ActionList/index.js +0 -29
  206. package/lib/ActionMenu.d.ts +0 -40
  207. package/lib/ActionMenu.js +0 -103
  208. package/lib/AnchoredOverlay/AnchoredOverlay.d.ts +0 -61
  209. package/lib/AnchoredOverlay/AnchoredOverlay.js +0 -116
  210. package/lib/AnchoredOverlay/index.d.ts +0 -2
  211. package/lib/AnchoredOverlay/index.js +0 -13
  212. package/lib/Avatar.d.ts +0 -15
  213. package/lib/AvatarPair.d.ts +0 -8
  214. package/lib/AvatarStack.d.ts +0 -8
  215. package/lib/BaseStyles.d.ts +0 -14
  216. package/lib/BorderBox.d.ts +0 -7
  217. package/lib/Box.d.ts +0 -6
  218. package/lib/BranchName.d.ts +0 -6
  219. package/lib/Breadcrumbs.d.ts +0 -40
  220. package/lib/Button/Button.d.ts +0 -284
  221. package/lib/Button/ButtonBase.d.ts +0 -12
  222. package/lib/Button/ButtonClose.d.ts +0 -321
  223. package/lib/Button/ButtonDanger.d.ts +0 -284
  224. package/lib/Button/ButtonGroup.d.ts +0 -4
  225. package/lib/Button/ButtonInvisible.d.ts +0 -284
  226. package/lib/Button/ButtonOutline.d.ts +0 -284
  227. package/lib/Button/ButtonPrimary.d.ts +0 -284
  228. package/lib/Button/ButtonStyles.d.ts +0 -2
  229. package/lib/Button/ButtonTableList.d.ts +0 -6
  230. package/lib/Button/index.d.ts +0 -16
  231. package/lib/Caret.d.ts +0 -21
  232. package/lib/CircleBadge.d.ts +0 -25
  233. package/lib/CircleOcticon.d.ts +0 -391
  234. package/lib/CounterLabel.d.ts +0 -8
  235. package/lib/DatePicker/DatePicker.d.ts +0 -35
  236. package/lib/DatePicker/DatePicker.js +0 -37
  237. package/lib/DatePicker/DatePickerPanel.d.ts +0 -0
  238. package/lib/DatePicker/DatePickerPanel.js +0 -1
  239. package/lib/DatePicker/Day.d.ts +0 -12
  240. package/lib/DatePicker/Day.js +0 -44
  241. package/lib/DatePicker/Month.d.ts +0 -10
  242. package/lib/DatePicker/Month.js +0 -28
  243. package/lib/DatePicker/index.d.ts +0 -2
  244. package/lib/DatePicker/index.js +0 -13
  245. package/lib/Details.d.ts +0 -6
  246. package/lib/Dialog/ConfirmationDialog.d.ts +0 -44
  247. package/lib/Dialog/ConfirmationDialog.js +0 -191
  248. package/lib/Dialog/Dialog.d.ts +0 -167
  249. package/lib/Dialog/Dialog.js +0 -304
  250. package/lib/Dialog.d.ts +0 -406
  251. package/lib/Dropdown.d.ts +0 -1262
  252. package/lib/DropdownMenu/DropdownButton.d.ts +0 -323
  253. package/lib/DropdownMenu/DropdownButton.js +0 -31
  254. package/lib/DropdownMenu/DropdownMenu.d.ts +0 -43
  255. package/lib/DropdownMenu/DropdownMenu.js +0 -94
  256. package/lib/DropdownMenu/index.d.ts +0 -4
  257. package/lib/DropdownMenu/index.js +0 -21
  258. package/lib/DropdownStyles.d.ts +0 -3
  259. package/lib/FilterList.d.ts +0 -321
  260. package/lib/FilteredActionList/FilteredActionList.d.ts +0 -16
  261. package/lib/FilteredActionList/FilteredActionList.js +0 -163
  262. package/lib/FilteredActionList/index.d.ts +0 -2
  263. package/lib/FilteredActionList/index.js +0 -13
  264. package/lib/FilteredSearch.d.ts +0 -6
  265. package/lib/Flash.d.ts +0 -9
  266. package/lib/Flex.d.ts +0 -7
  267. package/lib/FormGroup.d.ts +0 -12
  268. package/lib/Grid.d.ts +0 -7
  269. package/lib/Header.d.ts +0 -24
  270. package/lib/Heading.d.ts +0 -6
  271. package/lib/Label.d.ts +0 -11
  272. package/lib/LabelGroup.d.ts +0 -6
  273. package/lib/Link.d.ts +0 -10
  274. package/lib/Overlay.d.ts +0 -62
  275. package/lib/Pagehead.d.ts +0 -6
  276. package/lib/Pagination/Pagination.d.ts +0 -24
  277. package/lib/Pagination/index.d.ts +0 -3
  278. package/lib/Pagination/model.d.ts +0 -26
  279. package/lib/PointerBox.d.ts +0 -11
  280. package/lib/Popover.d.ts +0 -21
  281. package/lib/Portal/Portal.d.ts +0 -25
  282. package/lib/Portal/index.d.ts +0 -4
  283. package/lib/Position.d.ts +0 -34
  284. package/lib/ProgressBar.d.ts +0 -21
  285. package/lib/SelectMenu/SelectMenu.d.ts +0 -1832
  286. package/lib/SelectMenu/SelectMenuContext.d.ts +0 -8
  287. package/lib/SelectMenu/SelectMenuDivider.d.ts +0 -6
  288. package/lib/SelectMenu/SelectMenuFilter.d.ts +0 -9
  289. package/lib/SelectMenu/SelectMenuFooter.d.ts +0 -6
  290. package/lib/SelectMenu/SelectMenuHeader.d.ts +0 -11
  291. package/lib/SelectMenu/SelectMenuItem.d.ts +0 -15
  292. package/lib/SelectMenu/SelectMenuList.d.ts +0 -6
  293. package/lib/SelectMenu/SelectMenuLoadingAnimation.d.ts +0 -7
  294. package/lib/SelectMenu/SelectMenuModal.d.ts +0 -15
  295. package/lib/SelectMenu/SelectMenuTab.d.ts +0 -14
  296. package/lib/SelectMenu/SelectMenuTabPanel.d.ts +0 -13
  297. package/lib/SelectMenu/SelectMenuTabs.d.ts +0 -11
  298. package/lib/SelectMenu/hooks/useKeyboardNav.d.ts +0 -2
  299. package/lib/SelectMenu/index.d.ts +0 -2
  300. package/lib/SelectPanel/SelectPanel.d.ts +0 -25
  301. package/lib/SelectPanel/SelectPanel.js +0 -147
  302. package/lib/SelectPanel/index.d.ts +0 -2
  303. package/lib/SelectPanel/index.js +0 -13
  304. package/lib/SideNav.d.ts +0 -31
  305. package/lib/Spinner.d.ts +0 -17
  306. package/lib/Spinner.js +0 -60
  307. package/lib/StateLabel.d.ts +0 -16
  308. package/lib/StyledOcticon.d.ts +0 -12
  309. package/lib/SubNav.d.ts +0 -32
  310. package/lib/TabNav.d.ts +0 -20
  311. package/lib/Text.d.ts +0 -6
  312. package/lib/TextInput.d.ts +0 -22
  313. package/lib/ThemeProvider.d.ts +0 -26
  314. package/lib/Timeline.d.ts +0 -407
  315. package/lib/Tooltip.d.ts +0 -18
  316. package/lib/Truncate.d.ts +0 -11
  317. package/lib/UnderlineNav.d.ts +0 -25
  318. package/lib/behaviors/anchoredPosition.d.ts +0 -89
  319. package/lib/behaviors/focusTrap.d.ts +0 -12
  320. package/lib/behaviors/focusZone.d.ts +0 -137
  321. package/lib/constants.d.ts +0 -20
  322. package/lib/hooks/index.d.ts +0 -11
  323. package/lib/hooks/useAnchoredPosition.d.ts +0 -20
  324. package/lib/hooks/useCombinedRefs.d.ts +0 -10
  325. package/lib/hooks/useCombinedRefs.js +0 -49
  326. package/lib/hooks/useDetails.d.ts +0 -17
  327. package/lib/hooks/useDialog.d.ts +0 -16
  328. package/lib/hooks/useFocusTrap.d.ts +0 -32
  329. package/lib/hooks/useFocusZone.d.ts +0 -23
  330. package/lib/hooks/useOnEscapePress.d.ts +0 -23
  331. package/lib/hooks/useOnOutsideClick.d.ts +0 -8
  332. package/lib/hooks/useOpenAndCloseFocus.d.ts +0 -7
  333. package/lib/hooks/useOverlay.d.ts +0 -14
  334. package/lib/hooks/useProvidedRefOrCreate.d.ts +0 -10
  335. package/lib/hooks/useProvidedStateOrCreate.d.ts +0 -10
  336. package/lib/hooks/useProvidedStateOrCreate.js +0 -27
  337. package/lib/hooks/useRenderForcingRef.d.ts +0 -8
  338. package/lib/hooks/useRenderForcingRef.js +0 -25
  339. package/lib/hooks/useResizeObserver.d.ts +0 -1
  340. package/lib/hooks/useResizeObserver.js +0 -20
  341. package/lib/hooks/useSafeTimeout.d.ts +0 -12
  342. package/lib/hooks/useScrollFlash.d.ts +0 -6
  343. package/lib/hooks/useScrollFlash.js +0 -29
  344. package/lib/index.d.ts +0 -111
  345. package/lib/polyfills/eventListenerSignal.d.ts +0 -6
  346. package/lib/sx.d.ts +0 -6
  347. package/lib/theme-preval.d.ts +0 -49
  348. package/lib/theme.d.ts +0 -2
  349. package/lib/utils/deprecate.d.ts +0 -18
  350. package/lib/utils/isNumeric.d.ts +0 -1
  351. package/lib/utils/iterateFocusableElements.d.ts +0 -42
  352. package/lib/utils/ssr.d.ts +0 -1
  353. package/lib/utils/ssr.js +0 -19
  354. package/lib/utils/test-deprecations.d.ts +0 -1
  355. package/lib/utils/test-helpers.d.ts +0 -0
  356. package/lib/utils/test-helpers.js +0 -9
  357. package/lib/utils/test-matchers.d.ts +0 -1
  358. package/lib/utils/testing.d.ts +0 -1028
  359. package/lib/utils/theme.d.ts +0 -9
  360. package/lib/utils/types.d.ts +0 -14
  361. package/lib/utils/uniqueId.d.ts +0 -1
  362. package/lib/utils/userAgent.d.ts +0 -1
  363. package/lib-esm/ActionList/Divider.d.ts +0 -9
  364. package/lib-esm/ActionList/Divider.js +0 -23
  365. package/lib-esm/ActionList/Group.d.ts +0 -28
  366. package/lib-esm/ActionList/Group.js +0 -24
  367. package/lib-esm/ActionList/Header.d.ts +0 -29
  368. package/lib-esm/ActionList/Header.js +0 -33
  369. package/lib-esm/ActionList/Item.d.ts +0 -92
  370. package/lib-esm/ActionList/Item.js +0 -253
  371. package/lib-esm/ActionList/List.d.ts +0 -87
  372. package/lib-esm/ActionList/List.js +0 -181
  373. package/lib-esm/ActionList/index.d.ts +0 -17
  374. package/lib-esm/ActionList/index.js +0 -18
  375. package/lib-esm/ActionMenu.d.ts +0 -40
  376. package/lib-esm/ActionMenu.js +0 -82
  377. package/lib-esm/AnchoredOverlay/AnchoredOverlay.d.ts +0 -61
  378. package/lib-esm/AnchoredOverlay/AnchoredOverlay.js +0 -96
  379. package/lib-esm/AnchoredOverlay/index.d.ts +0 -2
  380. package/lib-esm/AnchoredOverlay/index.js +0 -1
  381. package/lib-esm/Avatar.d.ts +0 -15
  382. package/lib-esm/AvatarPair.d.ts +0 -8
  383. package/lib-esm/AvatarStack.d.ts +0 -8
  384. package/lib-esm/BaseStyles.d.ts +0 -14
  385. package/lib-esm/BorderBox.d.ts +0 -7
  386. package/lib-esm/Box.d.ts +0 -6
  387. package/lib-esm/BranchName.d.ts +0 -6
  388. package/lib-esm/Breadcrumbs.d.ts +0 -40
  389. package/lib-esm/Button/Button.d.ts +0 -284
  390. package/lib-esm/Button/ButtonBase.d.ts +0 -12
  391. package/lib-esm/Button/ButtonClose.d.ts +0 -321
  392. package/lib-esm/Button/ButtonDanger.d.ts +0 -284
  393. package/lib-esm/Button/ButtonGroup.d.ts +0 -4
  394. package/lib-esm/Button/ButtonInvisible.d.ts +0 -284
  395. package/lib-esm/Button/ButtonOutline.d.ts +0 -284
  396. package/lib-esm/Button/ButtonPrimary.d.ts +0 -284
  397. package/lib-esm/Button/ButtonStyles.d.ts +0 -2
  398. package/lib-esm/Button/ButtonTableList.d.ts +0 -6
  399. package/lib-esm/Button/index.d.ts +0 -16
  400. package/lib-esm/Caret.d.ts +0 -21
  401. package/lib-esm/CircleBadge.d.ts +0 -25
  402. package/lib-esm/CircleOcticon.d.ts +0 -391
  403. package/lib-esm/CounterLabel.d.ts +0 -8
  404. package/lib-esm/DatePicker/DatePicker.d.ts +0 -35
  405. package/lib-esm/DatePicker/DatePicker.js +0 -24
  406. package/lib-esm/DatePicker/DatePickerPanel.d.ts +0 -0
  407. package/lib-esm/DatePicker/DatePickerPanel.js +0 -0
  408. package/lib-esm/DatePicker/Day.d.ts +0 -12
  409. package/lib-esm/DatePicker/Day.js +0 -26
  410. package/lib-esm/DatePicker/Month.d.ts +0 -10
  411. package/lib-esm/DatePicker/Month.js +0 -13
  412. package/lib-esm/DatePicker/index.d.ts +0 -2
  413. package/lib-esm/DatePicker/index.js +0 -1
  414. package/lib-esm/Details.d.ts +0 -6
  415. package/lib-esm/Dialog/ConfirmationDialog.d.ts +0 -44
  416. package/lib-esm/Dialog/ConfirmationDialog.js +0 -169
  417. package/lib-esm/Dialog/Dialog.d.ts +0 -167
  418. package/lib-esm/Dialog/Dialog.js +0 -274
  419. package/lib-esm/Dialog.d.ts +0 -406
  420. package/lib-esm/Dropdown.d.ts +0 -1262
  421. package/lib-esm/DropdownMenu/DropdownButton.d.ts +0 -323
  422. package/lib-esm/DropdownMenu/DropdownButton.js +0 -16
  423. package/lib-esm/DropdownMenu/DropdownMenu.d.ts +0 -43
  424. package/lib-esm/DropdownMenu/DropdownMenu.js +0 -77
  425. package/lib-esm/DropdownMenu/index.d.ts +0 -4
  426. package/lib-esm/DropdownMenu/index.js +0 -2
  427. package/lib-esm/DropdownStyles.d.ts +0 -3
  428. package/lib-esm/FilterList.d.ts +0 -321
  429. package/lib-esm/FilteredActionList/FilteredActionList.d.ts +0 -16
  430. package/lib-esm/FilteredActionList/FilteredActionList.js +0 -137
  431. package/lib-esm/FilteredActionList/index.d.ts +0 -2
  432. package/lib-esm/FilteredActionList/index.js +0 -1
  433. package/lib-esm/FilteredSearch.d.ts +0 -6
  434. package/lib-esm/Flash.d.ts +0 -9
  435. package/lib-esm/Flex.d.ts +0 -7
  436. package/lib-esm/FormGroup.d.ts +0 -12
  437. package/lib-esm/Grid.d.ts +0 -7
  438. package/lib-esm/Header.d.ts +0 -24
  439. package/lib-esm/Heading.d.ts +0 -6
  440. package/lib-esm/Label.d.ts +0 -11
  441. package/lib-esm/LabelGroup.d.ts +0 -6
  442. package/lib-esm/Link.d.ts +0 -10
  443. package/lib-esm/Overlay.d.ts +0 -62
  444. package/lib-esm/Pagehead.d.ts +0 -6
  445. package/lib-esm/Pagination/Pagination.d.ts +0 -24
  446. package/lib-esm/Pagination/index.d.ts +0 -3
  447. package/lib-esm/Pagination/model.d.ts +0 -26
  448. package/lib-esm/PointerBox.d.ts +0 -11
  449. package/lib-esm/Popover.d.ts +0 -21
  450. package/lib-esm/Portal/Portal.d.ts +0 -25
  451. package/lib-esm/Portal/index.d.ts +0 -4
  452. package/lib-esm/Position.d.ts +0 -34
  453. package/lib-esm/ProgressBar.d.ts +0 -21
  454. package/lib-esm/SelectMenu/SelectMenu.d.ts +0 -1832
  455. package/lib-esm/SelectMenu/SelectMenuContext.d.ts +0 -8
  456. package/lib-esm/SelectMenu/SelectMenuDivider.d.ts +0 -6
  457. package/lib-esm/SelectMenu/SelectMenuFilter.d.ts +0 -9
  458. package/lib-esm/SelectMenu/SelectMenuFooter.d.ts +0 -6
  459. package/lib-esm/SelectMenu/SelectMenuHeader.d.ts +0 -11
  460. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +0 -15
  461. package/lib-esm/SelectMenu/SelectMenuList.d.ts +0 -6
  462. package/lib-esm/SelectMenu/SelectMenuLoadingAnimation.d.ts +0 -7
  463. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +0 -15
  464. package/lib-esm/SelectMenu/SelectMenuTab.d.ts +0 -14
  465. package/lib-esm/SelectMenu/SelectMenuTabPanel.d.ts +0 -13
  466. package/lib-esm/SelectMenu/SelectMenuTabs.d.ts +0 -11
  467. package/lib-esm/SelectMenu/hooks/useKeyboardNav.d.ts +0 -2
  468. package/lib-esm/SelectMenu/index.d.ts +0 -2
  469. package/lib-esm/SelectPanel/SelectPanel.d.ts +0 -25
  470. package/lib-esm/SelectPanel/SelectPanel.js +0 -127
  471. package/lib-esm/SelectPanel/index.d.ts +0 -2
  472. package/lib-esm/SelectPanel/index.js +0 -1
  473. package/lib-esm/SideNav.d.ts +0 -31
  474. package/lib-esm/Spinner.d.ts +0 -17
  475. package/lib-esm/Spinner.js +0 -46
  476. package/lib-esm/StateLabel.d.ts +0 -16
  477. package/lib-esm/StyledOcticon.d.ts +0 -12
  478. package/lib-esm/SubNav.d.ts +0 -32
  479. package/lib-esm/TabNav.d.ts +0 -20
  480. package/lib-esm/Text.d.ts +0 -6
  481. package/lib-esm/TextInput.d.ts +0 -22
  482. package/lib-esm/ThemeProvider.d.ts +0 -26
  483. package/lib-esm/Timeline.d.ts +0 -407
  484. package/lib-esm/Tooltip.d.ts +0 -18
  485. package/lib-esm/Truncate.d.ts +0 -11
  486. package/lib-esm/UnderlineNav.d.ts +0 -25
  487. package/lib-esm/behaviors/anchoredPosition.d.ts +0 -89
  488. package/lib-esm/behaviors/focusTrap.d.ts +0 -12
  489. package/lib-esm/behaviors/focusZone.d.ts +0 -137
  490. package/lib-esm/constants.d.ts +0 -20
  491. package/lib-esm/hooks/index.d.ts +0 -11
  492. package/lib-esm/hooks/useAnchoredPosition.d.ts +0 -20
  493. package/lib-esm/hooks/useCombinedRefs.d.ts +0 -10
  494. package/lib-esm/hooks/useCombinedRefs.js +0 -36
  495. package/lib-esm/hooks/useDetails.d.ts +0 -17
  496. package/lib-esm/hooks/useDialog.d.ts +0 -16
  497. package/lib-esm/hooks/useFocusTrap.d.ts +0 -32
  498. package/lib-esm/hooks/useFocusZone.d.ts +0 -23
  499. package/lib-esm/hooks/useOnEscapePress.d.ts +0 -23
  500. package/lib-esm/hooks/useOnOutsideClick.d.ts +0 -8
  501. package/lib-esm/hooks/useOpenAndCloseFocus.d.ts +0 -7
  502. package/lib-esm/hooks/useOverlay.d.ts +0 -14
  503. package/lib-esm/hooks/useProvidedRefOrCreate.d.ts +0 -10
  504. package/lib-esm/hooks/useProvidedStateOrCreate.d.ts +0 -10
  505. package/lib-esm/hooks/useProvidedStateOrCreate.js +0 -20
  506. package/lib-esm/hooks/useRenderForcingRef.d.ts +0 -8
  507. package/lib-esm/hooks/useRenderForcingRef.js +0 -18
  508. package/lib-esm/hooks/useResizeObserver.d.ts +0 -1
  509. package/lib-esm/hooks/useResizeObserver.js +0 -10
  510. package/lib-esm/hooks/useSafeTimeout.d.ts +0 -12
  511. package/lib-esm/hooks/useScrollFlash.d.ts +0 -6
  512. package/lib-esm/hooks/useScrollFlash.js +0 -22
  513. package/lib-esm/index.d.ts +0 -111
  514. package/lib-esm/polyfills/eventListenerSignal.d.ts +0 -6
  515. package/lib-esm/sx.d.ts +0 -6
  516. package/lib-esm/theme-preval.d.ts +0 -49
  517. package/lib-esm/theme.d.ts +0 -2
  518. package/lib-esm/utils/deprecate.d.ts +0 -18
  519. package/lib-esm/utils/isNumeric.d.ts +0 -1
  520. package/lib-esm/utils/iterateFocusableElements.d.ts +0 -42
  521. package/lib-esm/utils/ssr.d.ts +0 -1
  522. package/lib-esm/utils/ssr.js +0 -1
  523. package/lib-esm/utils/test-deprecations.d.ts +0 -1
  524. package/lib-esm/utils/test-helpers.d.ts +0 -0
  525. package/lib-esm/utils/test-helpers.js +0 -7
  526. package/lib-esm/utils/test-matchers.d.ts +0 -1
  527. package/lib-esm/utils/testing.d.ts +0 -1028
  528. package/lib-esm/utils/theme.d.ts +0 -9
  529. package/lib-esm/utils/types.d.ts +0 -14
  530. package/lib-esm/utils/uniqueId.d.ts +0 -1
  531. package/lib-esm/utils/userAgent.d.ts +0 -1
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.focusZone = focusZone;
7
- exports.hasActiveDescendantAttribute = exports.activeDescendantActivatedIndirectly = exports.activeDescendantActivatedDirectly = exports.isActiveDescendantAttribute = exports.FocusKeys = void 0;
7
+ exports.FocusKeys = void 0;
8
8
 
9
9
  var _iterateFocusableElements = require("../utils/iterateFocusableElements");
10
10
 
@@ -15,7 +15,6 @@ var _userAgent = require("../utils/userAgent");
15
15
  var _uniqueId = require("../utils/uniqueId");
16
16
 
17
17
  (0, _eventListenerSignal.polyfill)();
18
- // eslint-disable-next-line no-shadow
19
18
  let FocusKeys;
20
19
  exports.FocusKeys = FocusKeys;
21
20
 
@@ -176,27 +175,21 @@ function shouldIgnoreFocusHandling(keyboardEvent, activeElement) {
176
175
  return false;
177
176
  }
178
177
 
179
- const isActiveDescendantAttribute = 'data-is-active-descendant';
180
- /**
181
- * A value of activated-directly for data-is-active-descendant indicates the descendant was activated
182
- * by a manual user interaction with intent to move active descendant. This usually translates to the
183
- * user pressing one of the bound keys (up/down arrow, etc) to move through the focus zone. This is
184
- * intended to be roughly equivalent to the :focus-visible pseudo-class
185
- **/
186
-
187
- exports.isActiveDescendantAttribute = isActiveDescendantAttribute;
188
- const activeDescendantActivatedDirectly = 'activated-directly';
189
- /**
190
- * A value of activated-indirectly for data-is-active-descendant indicates the descendant was activated
191
- * implicitly, and not by a direct key press. This includes focus zone being created from scratch, focusable
192
- * elements being added/removed, and mouseover events. This is intended to be roughly equivalent
193
- * to :focus:not(:focus-visible)
194
- **/
195
-
196
- exports.activeDescendantActivatedDirectly = activeDescendantActivatedDirectly;
197
- const activeDescendantActivatedIndirectly = 'activated-indirectly';
198
- exports.activeDescendantActivatedIndirectly = activeDescendantActivatedIndirectly;
199
- const hasActiveDescendantAttribute = 'data-has-active-descendant';
178
+ const subscriptions = [];
179
+
180
+ function notifyActiveElement(element) {
181
+ for (const subscription of subscriptions) {
182
+ subscription(element);
183
+ }
184
+ }
185
+
186
+ function subscribeToActiveElementChanges(callback) {
187
+ subscriptions.push(callback);
188
+ return () => {
189
+ const index = subscriptions.indexOf(callback);
190
+ subscriptions.splice(index, 1);
191
+ };
192
+ }
200
193
  /**
201
194
  * Sets up the arrow key focus behavior for all focusable elements in the given `container`.
202
195
  * @param container
@@ -204,7 +197,6 @@ const hasActiveDescendantAttribute = 'data-has-active-descendant';
204
197
  * @returns
205
198
  */
206
199
 
207
- exports.hasActiveDescendantAttribute = hasActiveDescendantAttribute;
208
200
 
209
201
  function focusZone(container, settings) {
210
202
  var _settings$bindKeys, _settings$focusOutBeh, _settings$focusInStra, _settings$abortSignal;
@@ -216,66 +208,34 @@ function focusZone(container, settings) {
216
208
  const focusInStrategy = (_settings$focusInStra = settings === null || settings === void 0 ? void 0 : settings.focusInStrategy) !== null && _settings$focusInStra !== void 0 ? _settings$focusInStra : 'previous';
217
209
  const activeDescendantControl = settings === null || settings === void 0 ? void 0 : settings.activeDescendantControl;
218
210
  const activeDescendantCallback = settings === null || settings === void 0 ? void 0 : settings.onActiveDescendantChanged;
219
- let currentFocusedElement;
220
211
 
221
- function getFirstFocusableElement() {
222
- return focusableElements[0];
223
- }
224
-
225
- function isActiveDescendantInputFocused() {
226
- return document.activeElement === activeDescendantControl;
227
- }
228
-
229
- function updateFocusedElement(to, directlyActivated = false) {
230
- const from = currentFocusedElement;
231
- currentFocusedElement = to;
232
-
233
- if (activeDescendantControl) {
234
- if (to && isActiveDescendantInputFocused()) {
235
- setActiveDescendant(from, to, directlyActivated);
236
- } else {
237
- clearActiveDescendant();
238
- }
239
-
240
- return;
241
- }
242
-
243
- if (from && from !== to && savedTabIndex.has(from)) {
244
- from.setAttribute('tabindex', '-1');
212
+ function updateTabIndex(from, to) {
213
+ if (!activeDescendantControl) {
214
+ from === null || from === void 0 ? void 0 : from.setAttribute('tabindex', '-1');
215
+ to === null || to === void 0 ? void 0 : to.setAttribute('tabindex', '0');
245
216
  }
246
-
247
- to === null || to === void 0 ? void 0 : to.setAttribute('tabindex', '0');
248
217
  }
249
218
 
250
- function setActiveDescendant(from, to, directlyActivated = false) {
219
+ function setActiveDescendant(from, to) {
251
220
  if (!to.id) {
252
221
  to.setAttribute('id', (0, _uniqueId.uniqueId)());
253
222
  }
254
223
 
255
- if (from && from !== to) {
256
- from.removeAttribute(isActiveDescendantAttribute);
257
- }
258
-
259
- if (!activeDescendantControl || !directlyActivated && activeDescendantControl.getAttribute('aria-activedescendant') === to.id) {
260
- // prevent active descendant callback from being called repeatedly if the same element is activated (e.g. via mousemove)
261
- return;
262
- }
263
-
264
- activeDescendantControl.setAttribute('aria-activedescendant', to.id);
265
- container.setAttribute(hasActiveDescendantAttribute, to.id);
266
- to.setAttribute(isActiveDescendantAttribute, directlyActivated ? activeDescendantActivatedDirectly : activeDescendantActivatedIndirectly);
267
- activeDescendantCallback === null || activeDescendantCallback === void 0 ? void 0 : activeDescendantCallback(to, from, directlyActivated);
224
+ currentFocusedElement = to;
225
+ activeDescendantControl === null || activeDescendantControl === void 0 ? void 0 : activeDescendantControl.setAttribute('aria-activedescendant', to.id);
226
+ notifyActiveElement(to);
227
+ activeDescendantCallback === null || activeDescendantCallback === void 0 ? void 0 : activeDescendantCallback(to, from);
268
228
  }
269
229
 
270
- function clearActiveDescendant(previouslyActiveElement = currentFocusedElement) {
230
+ function suspendActiveDescendant() {
231
+ activeDescendantControl === null || activeDescendantControl === void 0 ? void 0 : activeDescendantControl.removeAttribute('aria-activedescendant');
232
+ activeDescendantSuspended = true;
233
+ activeDescendantCallback === null || activeDescendantCallback === void 0 ? void 0 : activeDescendantCallback(undefined, currentFocusedElement);
234
+ currentFocusedElement = undefined;
235
+
271
236
  if (focusInStrategy === 'first') {
272
- currentFocusedElement = undefined;
237
+ currentFocusedIndex = 0;
273
238
  }
274
-
275
- activeDescendantControl === null || activeDescendantControl === void 0 ? void 0 : activeDescendantControl.removeAttribute('aria-activedescendant');
276
- container.removeAttribute(hasActiveDescendantAttribute);
277
- previouslyActiveElement === null || previouslyActiveElement === void 0 ? void 0 : previouslyActiveElement.removeAttribute(isActiveDescendantAttribute);
278
- activeDescendantCallback === null || activeDescendantCallback === void 0 ? void 0 : activeDescendantCallback(undefined, previouslyActiveElement, false);
279
239
  }
280
240
 
281
241
  function beginFocusManagement(...elements) {
@@ -302,10 +262,6 @@ function focusZone(container, settings) {
302
262
 
303
263
  element.setAttribute('tabindex', '-1');
304
264
  }
305
-
306
- if (!currentFocusedElement) {
307
- updateFocusedElement(getFirstFocusableElement());
308
- }
309
265
  }
310
266
 
311
267
  function endFocusManagement(...elements) {
@@ -313,7 +269,13 @@ function focusZone(container, settings) {
313
269
  const focusableElementIndex = focusableElements.indexOf(element);
314
270
 
315
271
  if (focusableElementIndex >= 0) {
316
- focusableElements.splice(focusableElementIndex, 1);
272
+ focusableElements.splice(focusableElementIndex, 1); // If removing the last-focused element, set tabindex=0 to the first element in the list.
273
+
274
+ if (element === currentFocusedElement && focusableElements.length > 0) {
275
+ updateTabIndex(undefined, focusableElements[0]);
276
+ currentFocusedElement = focusableElements[0];
277
+ currentFocusedIndex = 0;
278
+ }
317
279
  }
318
280
 
319
281
  const savedIndex = savedTabIndex.get(element);
@@ -326,38 +288,44 @@ function focusZone(container, settings) {
326
288
  }
327
289
 
328
290
  savedTabIndex.delete(element);
329
- } // If removing the last-focused element, move focus to the first element in the list.
330
-
331
-
332
- if (element === currentFocusedElement) {
333
- const nextElementToFocus = getFirstFocusableElement();
334
- updateFocusedElement(nextElementToFocus);
335
291
  }
336
292
  }
337
293
  } // Take all tabbable elements within container under management
338
294
 
339
295
 
340
- beginFocusManagement(...(0, _iterateFocusableElements.iterateFocusableElements)(container)); // Open the first tabbable element for tabbing
296
+ beginFocusManagement(...(0, _iterateFocusableElements.iterateFocusableElements)(container)); // If multiple focus zones have overlapping DOM, we need to know about
297
+ // any changes that result from others so that the "previous" active element
298
+ // stays consistent.
341
299
 
342
- updateFocusedElement(getFirstFocusableElement()); // If the DOM structure of the container changes, make sure we keep our state up-to-date
343
- // with respect to the focusable elements cache and its order
300
+ const unsubscribeFromActiveElementChanges = subscribeToActiveElementChanges(activeElement => {
301
+ if (focusInStrategy === 'previous') {
302
+ const tabbableElementIndex = focusableElements.indexOf(activeElement);
344
303
 
345
- const observer = new MutationObserver(mutations => {
346
- // Perform all removals first, in case element order has simply changed
347
- for (const mutation of mutations) {
348
- for (const removedNode of mutation.removedNodes) {
349
- if (removedNode instanceof HTMLElement) {
350
- endFocusManagement(...(0, _iterateFocusableElements.iterateFocusableElements)(removedNode));
351
- }
304
+ if (tabbableElementIndex >= 0) {
305
+ const nextFocusedElement = focusableElements[tabbableElementIndex];
306
+ const previousFocusedElement = focusableElements[currentFocusedIndex];
307
+ updateTabIndex(previousFocusedElement, nextFocusedElement);
308
+ currentFocusedIndex = tabbableElementIndex;
352
309
  }
353
310
  }
311
+ }); // Open the first tabbable element for tabbing
312
+
313
+ updateTabIndex(undefined, focusableElements[0]); // If the DOM structure of the container changes, make sure we keep our state up-to-date
314
+ // with respect to the focusable elements cache and its order
354
315
 
316
+ const observer = new MutationObserver(mutations => {
355
317
  for (const mutation of mutations) {
356
318
  for (const addedNode of mutation.addedNodes) {
357
- if (addedNode instanceof HTMLElement) {
319
+ if (addedNode instanceof HTMLElement && (0, _iterateFocusableElements.isFocusable)(addedNode)) {
358
320
  beginFocusManagement(...(0, _iterateFocusableElements.iterateFocusableElements)(addedNode));
359
321
  }
360
322
  }
323
+
324
+ for (const removedNode of mutation.removedNodes) {
325
+ if (removedNode instanceof HTMLElement && savedTabIndex.has(removedNode)) {
326
+ endFocusManagement(...(0, _iterateFocusableElements.iterateFocusableElements)(removedNode));
327
+ }
328
+ }
361
329
  }
362
330
  });
363
331
  observer.observe(container, {
@@ -369,7 +337,13 @@ function focusZone(container, settings) {
369
337
  signal.addEventListener('abort', () => {
370
338
  // Clean up any modifications
371
339
  endFocusManagement(...focusableElements);
372
- });
340
+ unsubscribeFromActiveElementChanges();
341
+ }); // When using activedescendant focusing, the first focus-in is caused by our listeners
342
+ // meaning we have to approach zero. This is safe since we clamp the value before using it.
343
+
344
+ let currentFocusedIndex = 0;
345
+ let activeDescendantSuspended = activeDescendantControl ? true : false;
346
+ let currentFocusedElement = activeDescendantControl ? undefined : focusableElements[0];
373
347
  let elementIndexFocusedByClick = undefined;
374
348
  container.addEventListener('mousedown', event => {
375
349
  // Since focusin is only called when focus changes, we need to make sure the clicked
@@ -379,75 +353,35 @@ function focusZone(container, settings) {
379
353
  }
380
354
  }, {
381
355
  signal
382
- });
383
-
384
- if (activeDescendantControl) {
385
- container.addEventListener('focusin', event => {
386
- if (event.target instanceof HTMLElement && focusableElements.includes(event.target)) {
387
- // Move focus to the activeDescendantControl if one of the descendants is focused
388
- activeDescendantControl.focus();
389
- updateFocusedElement(event.target);
390
- }
391
- });
392
- container.addEventListener('mousemove', ({
393
- target
394
- }) => {
395
- if (!(target instanceof Node)) {
396
- return;
397
- }
398
-
399
- const focusableElement = focusableElements.find(element => element.contains(target));
356
+ }); // This is called whenever focus enters the container
400
357
 
401
- if (focusableElement) {
402
- updateFocusedElement(focusableElement);
403
- }
404
- }, {
405
- signal,
406
- capture: true
407
- }); // Listeners specifically on the controlling element
408
-
409
- activeDescendantControl.addEventListener('focusin', () => {
410
- // Focus moved into the active descendant input. Activate current or first descendant.
411
- if (!currentFocusedElement) {
412
- updateFocusedElement(getFirstFocusableElement());
413
- } else {
414
- setActiveDescendant(undefined, currentFocusedElement);
415
- }
416
- });
417
- activeDescendantControl.addEventListener('focusout', () => {
418
- clearActiveDescendant();
419
- });
420
- } else {
421
- // This is called whenever focus enters an element in the container
358
+ if (!activeDescendantControl) {
422
359
  container.addEventListener('focusin', event => {
423
360
  if (event.target instanceof HTMLElement) {
424
361
  // If a click initiated the focus movement, we always want to set our internal state
425
362
  // to reflect the clicked element as the currently focused one.
426
- if (elementIndexFocusedByClick !== undefined) {
363
+ if (elementIndexFocusedByClick != undefined) {
427
364
  if (elementIndexFocusedByClick >= 0) {
428
365
  if (focusableElements[elementIndexFocusedByClick] !== currentFocusedElement) {
429
- updateFocusedElement(focusableElements[elementIndexFocusedByClick]);
366
+ updateTabIndex(currentFocusedElement, focusableElements[elementIndexFocusedByClick]);
430
367
  }
368
+
369
+ currentFocusedIndex = elementIndexFocusedByClick;
431
370
  }
432
371
 
433
372
  elementIndexFocusedByClick = undefined;
434
373
  } else {
435
374
  // Set tab indexes and internal state based on the focus handling strategy
436
375
  if (focusInStrategy === 'previous') {
437
- updateFocusedElement(event.target);
438
- } else if (focusInStrategy === 'closest' || focusInStrategy === 'first') {
439
- if (event.relatedTarget instanceof Element && !container.contains(event.relatedTarget)) {
376
+ updateTabIndex(currentFocusedElement, event.target);
377
+ } else if (focusInStrategy === 'first') {
378
+ if (event.relatedTarget instanceof Element && !container.contains(event.relatedTarget) && event.target !== focusableElements[0]) {
440
379
  // Regardless of the previously focused element, if we're coming from outside the
441
- // container, put focus onto the first encountered element (from above, it's The
442
- // first element of the container; from below, it's the last). If the
443
- // focusInStrategy is set to "first", lastKeyboardFocusDirection will always
444
- // be undefined.
445
- const targetElementIndex = lastKeyboardFocusDirection === 'previous' ? focusableElements.length - 1 : 0;
446
- const targetElement = focusableElements[targetElementIndex];
447
- targetElement === null || targetElement === void 0 ? void 0 : targetElement.focus();
448
- return;
380
+ // container, put focus onto the first element.
381
+ currentFocusedIndex = 0;
382
+ focusableElements[0].focus();
449
383
  } else {
450
- updateFocusedElement(event.target);
384
+ updateTabIndex(currentFocusedElement, event.target);
451
385
  }
452
386
  } else if (typeof focusInStrategy === 'function') {
453
387
  if (event.relatedTarget instanceof Element && !container.contains(event.relatedTarget)) {
@@ -455,54 +389,31 @@ function focusZone(container, settings) {
455
389
  const requestedFocusElementIndex = elementToFocus ? focusableElements.indexOf(elementToFocus) : -1;
456
390
 
457
391
  if (requestedFocusElementIndex >= 0 && elementToFocus instanceof HTMLElement) {
458
- // Since we are calling focus() this handler will run again synchronously. Therefore,
392
+ currentFocusedIndex = requestedFocusElementIndex; // Since we are calling focus() this handler will run again synchronously. Therefore,
459
393
  // we don't want to let this invocation finish since it will clobber the value of
460
394
  // currentFocusedElement.
395
+
461
396
  elementToFocus.focus();
462
397
  return;
463
398
  } else {
464
- // eslint-disable-next-line no-console
399
+ // Should we warn here?
465
400
  console.warn('Element requested is not a known focusable element.');
466
401
  }
467
402
  } else {
468
- updateFocusedElement(event.target);
403
+ updateTabIndex(currentFocusedElement, event.target);
469
404
  }
470
405
  }
471
406
  }
472
- }
473
-
474
- lastKeyboardFocusDirection = undefined;
475
- }, {
476
- signal
477
- });
478
- }
479
407
 
480
- const keyboardEventRecipient = activeDescendantControl !== null && activeDescendantControl !== void 0 ? activeDescendantControl : container; // If the strategy is "closest", we need to capture the direction that the user
481
- // is trying to move focus before our focusin handler is executed.
482
-
483
- let lastKeyboardFocusDirection = undefined;
484
-
485
- if (focusInStrategy === 'closest') {
486
- document.addEventListener('keydown', event => {
487
- if (event.key === 'Tab') {
488
- lastKeyboardFocusDirection = getDirection(event);
408
+ notifyActiveElement(event.target);
409
+ currentFocusedElement = event.target;
489
410
  }
490
411
  }, {
491
- signal,
492
- capture: true
412
+ signal
493
413
  });
494
414
  }
495
415
 
496
- function getCurrentFocusedIndex() {
497
- if (!currentFocusedElement) {
498
- return 0;
499
- }
500
-
501
- const focusedIndex = focusableElements.indexOf(currentFocusedElement);
502
- const fallbackIndex = currentFocusedElement === container ? -1 : 0;
503
- return focusedIndex !== -1 ? focusedIndex : fallbackIndex;
504
- } // "keydown" is the event that triggers DOM focus change, so that is what we use here
505
-
416
+ const keyboardEventRecipient = activeDescendantControl !== null && activeDescendantControl !== void 0 ? activeDescendantControl : container; // "keydown" is the event that triggers DOM focus change, so that is what we use here
506
417
 
507
418
  keyboardEventRecipient.addEventListener('keydown', event => {
508
419
  if (event.key in KEY_TO_DIRECTION) {
@@ -511,57 +422,65 @@ function focusZone(container, settings) {
511
422
  if (!event.defaultPrevented && (keyBit & bindKeys) > 0 && !shouldIgnoreFocusHandling(event, document.activeElement)) {
512
423
  // Moving forward or backward?
513
424
  const direction = getDirection(event);
514
- let nextElementToFocus = undefined; // If there is a custom function that retrieves the next focusable element, try calling that first.
425
+ let nextElementToFocus = undefined;
515
426
 
516
- if (settings !== null && settings !== void 0 && settings.getNextFocusable) {
517
- var _document$activeEleme;
427
+ if (activeDescendantSuspended) {
428
+ activeDescendantSuspended = false;
429
+ nextElementToFocus = focusableElements[currentFocusedIndex];
430
+ } else {
431
+ // If there is a custom function that retrieves the next focusable element, try calling that first.
432
+ if (settings !== null && settings !== void 0 && settings.getNextFocusable) {
433
+ var _document$activeEleme;
518
434
 
519
- nextElementToFocus = settings.getNextFocusable(direction, (_document$activeEleme = document.activeElement) !== null && _document$activeEleme !== void 0 ? _document$activeEleme : undefined, event);
520
- }
435
+ nextElementToFocus = settings.getNextFocusable(direction, (_document$activeEleme = document.activeElement) !== null && _document$activeEleme !== void 0 ? _document$activeEleme : undefined, event);
436
+ }
521
437
 
522
- if (!nextElementToFocus) {
523
- const lastFocusedIndex = getCurrentFocusedIndex();
524
- let nextFocusedIndex = lastFocusedIndex;
438
+ if (!nextElementToFocus) {
439
+ const lastFocusedIndex = currentFocusedIndex;
440
+
441
+ if (direction === 'previous') {
442
+ currentFocusedIndex -= 1;
443
+ } else if (direction === 'start') {
444
+ currentFocusedIndex = 0;
445
+ } else if (direction === 'next') {
446
+ currentFocusedIndex += 1;
447
+ } else if (direction === 'end') {
448
+ currentFocusedIndex = focusableElements.length - 1;
449
+ }
525
450
 
526
- if (direction === 'previous') {
527
- nextFocusedIndex -= 1;
528
- } else if (direction === 'start') {
529
- nextFocusedIndex = 0;
530
- } else if (direction === 'next') {
531
- nextFocusedIndex += 1;
532
- } else {
533
- // end
534
- nextFocusedIndex = focusableElements.length - 1;
535
- }
451
+ if (currentFocusedIndex < 0) {
452
+ // Tab should never cause focus to wrap. Use focusTrap for that behavior.
453
+ if (focusOutBehavior === 'wrap' && event.key !== 'Tab') {
454
+ currentFocusedIndex = focusableElements.length - 1;
455
+ } else {
456
+ if (activeDescendantControl) {
457
+ suspendActiveDescendant();
458
+ }
536
459
 
537
- if (nextFocusedIndex < 0) {
538
- // Tab should never cause focus to wrap. Use focusTrap for that behavior.
539
- if (focusOutBehavior === 'wrap' && event.key !== 'Tab') {
540
- nextFocusedIndex = focusableElements.length - 1;
541
- } else {
542
- nextFocusedIndex = 0;
460
+ currentFocusedIndex = 0;
461
+ }
543
462
  }
544
- }
545
463
 
546
- if (nextFocusedIndex >= focusableElements.length) {
547
- if (focusOutBehavior === 'wrap' && event.key !== 'Tab') {
548
- nextFocusedIndex = 0;
549
- } else {
550
- nextFocusedIndex = focusableElements.length - 1;
464
+ if (currentFocusedIndex >= focusableElements.length) {
465
+ if (focusOutBehavior === 'wrap' && event.key !== 'Tab') {
466
+ currentFocusedIndex = 0;
467
+ } else {
468
+ currentFocusedIndex = focusableElements.length - 1;
469
+ }
551
470
  }
552
- }
553
471
 
554
- if (lastFocusedIndex !== nextFocusedIndex) {
555
- nextElementToFocus = focusableElements[nextFocusedIndex];
472
+ if (lastFocusedIndex !== currentFocusedIndex) {
473
+ nextElementToFocus = focusableElements[currentFocusedIndex];
474
+ }
556
475
  }
557
476
  }
558
477
 
559
- if (activeDescendantControl) {
560
- updateFocusedElement(nextElementToFocus || currentFocusedElement, true);
561
- } else if (nextElementToFocus) {
562
- lastKeyboardFocusDirection = direction; // updateFocusedElement will be called implicitly when focus moves, as long as the event isn't prevented somehow
563
-
564
- nextElementToFocus.focus();
478
+ if (nextElementToFocus) {
479
+ if (activeDescendantControl) {
480
+ setActiveDescendant(currentFocusedElement, nextElementToFocus);
481
+ } else {
482
+ nextElementToFocus.focus();
483
+ }
565
484
  } // Tab should always allow escaping from this container, so only
566
485
  // preventDefault if tab key press already resulted in a focus movement
567
486
 
@@ -571,8 +490,19 @@ function focusZone(container, settings) {
571
490
  }
572
491
  }
573
492
  }
493
+
494
+ if (event.key === 'Escape' && !activeDescendantSuspended && activeDescendantControl) {
495
+ suspendActiveDescendant();
496
+ }
574
497
  }, {
575
498
  signal
576
499
  });
500
+
501
+ if (activeDescendantControl) {
502
+ activeDescendantControl.addEventListener('focusout', () => {
503
+ suspendActiveDescendant();
504
+ });
505
+ }
506
+
577
507
  return controller;
578
508
  }
package/lib/constants.js CHANGED
@@ -13,11 +13,10 @@ var _theme = _interopRequireDefault(require("./theme"));
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
17
17
 
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
19
 
20
- // eslint-disable-next-line import/no-namespace
21
20
  const {
22
21
  get: getKey,
23
22
  compose,
@@ -39,12 +39,6 @@ Object.defineProperty(exports, "useOverlay", {
39
39
  return _useOverlay.useOverlay;
40
40
  }
41
41
  });
42
- Object.defineProperty(exports, "useRenderForcingRef", {
43
- enumerable: true,
44
- get: function () {
45
- return _useRenderForcingRef.useRenderForcingRef;
46
- }
47
- });
48
42
 
49
43
  var _useOnOutsideClick = require("./useOnOutsideClick");
50
44
 
@@ -56,6 +50,4 @@ var _useOpenAndCloseFocus = require("./useOpenAndCloseFocus");
56
50
 
57
51
  var _useAnchoredPosition = require("./useAnchoredPosition");
58
52
 
59
- var _useOverlay = require("./useOverlay");
60
-
61
- var _useRenderForcingRef = require("./useRenderForcingRef");
53
+ var _useOverlay = require("./useOverlay");
@@ -11,8 +11,6 @@ var _anchoredPosition = require("../behaviors/anchoredPosition");
11
11
 
12
12
  var _useProvidedRefOrCreate = require("./useProvidedRefOrCreate");
13
13
 
14
- var _useResizeObserver = require("./useResizeObserver");
15
-
16
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
15
 
18
16
  /**
@@ -24,24 +22,19 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
24
22
  * @returns An object of {top: number, left: number} to absolutely-position the
25
23
  * floating element.
26
24
  */
27
- function useAnchoredPosition(settings, dependencies = []) {
25
+ function useAnchoredPosition(settings, dependencies) {
28
26
  const floatingElementRef = (0, _useProvidedRefOrCreate.useProvidedRefOrCreate)(settings === null || settings === void 0 ? void 0 : settings.floatingElementRef);
29
27
  const anchorElementRef = (0, _useProvidedRefOrCreate.useProvidedRefOrCreate)(settings === null || settings === void 0 ? void 0 : settings.anchorElementRef);
30
28
 
31
29
  const [position, setPosition] = _react.default.useState(undefined);
32
30
 
33
- const updatePosition = _react.default.useCallback(() => {
31
+ _react.default.useEffect(() => {
34
32
  if (floatingElementRef.current instanceof Element && anchorElementRef.current instanceof Element) {
35
33
  setPosition((0, _anchoredPosition.getAnchoredPosition)(floatingElementRef.current, anchorElementRef.current, settings));
36
- } else {
37
- setPosition(undefined);
38
- }
39
- }, // eslint-disable-next-line react-hooks/exhaustive-deps
40
- [floatingElementRef, anchorElementRef, ...dependencies]);
34
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
41
35
 
42
- _react.default.useLayoutEffect(updatePosition, [updatePosition]);
36
+ }, dependencies !== null && dependencies !== void 0 ? dependencies : []);
43
37
 
44
- (0, _useResizeObserver.useResizeObserver)(updatePosition);
45
38
  return {
46
39
  floatingElementRef,
47
40
  anchorElementRef,
@@ -49,7 +49,7 @@ function useDialog({
49
49
  }
50
50
  }, [isOpen, initialFocusRef, closeButtonRef]);
51
51
  const getFocusableItem = (0, _react.useCallback)((e, movement) => {
52
- if (modalRef.current) {
52
+ if (modalRef && modalRef.current) {
53
53
  const items = Array.from(modalRef.current.querySelectorAll('*')).filter(focusable);
54
54
  if (items.length === 0) return;
55
55
  e.preventDefault();