@salt-ds/lab 1.0.0-alpha.90 → 1.0.0-alpha.91

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 (356) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/css/salt-lab.css +125 -366
  3. package/dist-cjs/index.js +20 -16
  4. package/dist-cjs/index.js.map +1 -1
  5. package/dist-cjs/mega-menu/MegaMenu.js +82 -0
  6. package/dist-cjs/mega-menu/MegaMenu.js.map +1 -0
  7. package/dist-cjs/mega-menu/MegaMenuContent.css.js +6 -0
  8. package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +1 -0
  9. package/dist-cjs/mega-menu/MegaMenuContent.js +33 -0
  10. package/dist-cjs/mega-menu/MegaMenuContent.js.map +1 -0
  11. package/dist-cjs/mega-menu/MegaMenuContext.js +11 -0
  12. package/dist-cjs/mega-menu/MegaMenuContext.js.map +1 -0
  13. package/dist-cjs/mega-menu/MegaMenuGroup.css.js +6 -0
  14. package/dist-cjs/mega-menu/MegaMenuGroup.css.js.map +1 -0
  15. package/dist-cjs/mega-menu/MegaMenuGroup.js +58 -0
  16. package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -0
  17. package/dist-cjs/mega-menu/MegaMenuHeader.css.js +6 -0
  18. package/dist-cjs/mega-menu/MegaMenuHeader.css.js.map +1 -0
  19. package/dist-cjs/mega-menu/MegaMenuHeader.js +26 -0
  20. package/dist-cjs/mega-menu/MegaMenuHeader.js.map +1 -0
  21. package/dist-cjs/mega-menu/MegaMenuItem.css.js +6 -0
  22. package/dist-cjs/mega-menu/MegaMenuItem.css.js.map +1 -0
  23. package/dist-cjs/mega-menu/MegaMenuItem.js +52 -0
  24. package/dist-cjs/mega-menu/MegaMenuItem.js.map +1 -0
  25. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js +6 -0
  26. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js.map +1 -0
  27. package/dist-cjs/mega-menu/MegaMenuItemContent.js +23 -0
  28. package/dist-cjs/mega-menu/MegaMenuItemContent.js.map +1 -0
  29. package/dist-cjs/mega-menu/MegaMenuPanel.css.js +6 -0
  30. package/dist-cjs/mega-menu/MegaMenuPanel.css.js.map +1 -0
  31. package/dist-cjs/mega-menu/MegaMenuPanel.js +108 -0
  32. package/dist-cjs/mega-menu/MegaMenuPanel.js.map +1 -0
  33. package/dist-cjs/mega-menu/MegaMenuSection.css.js +6 -0
  34. package/dist-cjs/mega-menu/MegaMenuSection.css.js.map +1 -0
  35. package/dist-cjs/mega-menu/MegaMenuSection.js +25 -0
  36. package/dist-cjs/mega-menu/MegaMenuSection.js.map +1 -0
  37. package/dist-cjs/mega-menu/MegaMenuTrigger.js +92 -0
  38. package/dist-cjs/mega-menu/MegaMenuTrigger.js.map +1 -0
  39. package/dist-cjs/mega-menu/useMegaMenu.js +15 -0
  40. package/dist-cjs/mega-menu/useMegaMenu.js.map +1 -0
  41. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +209 -0
  42. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +1 -0
  43. package/dist-cjs/side-panel/SidePanel.css.js +1 -1
  44. package/dist-cjs/side-panel/SidePanel.js +25 -30
  45. package/dist-cjs/side-panel/SidePanel.js.map +1 -1
  46. package/dist-cjs/side-panel/SidePanelCloseButton.js +38 -0
  47. package/dist-cjs/side-panel/SidePanelCloseButton.js.map +1 -0
  48. package/dist-cjs/side-panel/SidePanelContent.css.js +1 -1
  49. package/dist-cjs/side-panel/SidePanelContent.js +3 -23
  50. package/dist-cjs/side-panel/SidePanelContent.js.map +1 -1
  51. package/dist-cjs/side-panel/SidePanelHeader.css.js +1 -1
  52. package/dist-cjs/side-panel/SidePanelProvider.js +20 -2
  53. package/dist-cjs/side-panel/SidePanelProvider.js.map +1 -1
  54. package/dist-cjs/side-panel/SidePanelTitle.css.js +1 -1
  55. package/dist-cjs/side-panel/SidePanelTitle.js +1 -0
  56. package/dist-cjs/side-panel/SidePanelTitle.js.map +1 -1
  57. package/dist-cjs/side-panel/SidePanelTrigger.js +4 -4
  58. package/dist-cjs/side-panel/SidePanelTrigger.js.map +1 -1
  59. package/dist-cjs/side-panel/internal/SidePanelContext.js +3 -0
  60. package/dist-cjs/side-panel/internal/SidePanelContext.js.map +1 -1
  61. package/dist-cjs/side-panel/internal/useIsScrollable.js +50 -0
  62. package/dist-cjs/side-panel/internal/useIsScrollable.js.map +1 -0
  63. package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js +121 -0
  64. package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
  65. package/dist-cjs/side-panel/useSidePanel.js +3 -1
  66. package/dist-cjs/side-panel/useSidePanel.js.map +1 -1
  67. package/dist-cjs/tree/Tree.js +8 -5
  68. package/dist-cjs/tree/Tree.js.map +1 -1
  69. package/dist-cjs/tree/TreeContext.js.map +1 -1
  70. package/dist-cjs/tree/TreeNode.js +18 -14
  71. package/dist-cjs/tree/TreeNode.js.map +1 -1
  72. package/dist-cjs/tree/TreeNodeTrigger.js +4 -3
  73. package/dist-cjs/tree/TreeNodeTrigger.js.map +1 -1
  74. package/dist-cjs/tree/treeModel.js +61 -0
  75. package/dist-cjs/tree/treeModel.js.map +1 -0
  76. package/dist-cjs/tree/useTree.js +71 -65
  77. package/dist-cjs/tree/useTree.js.map +1 -1
  78. package/dist-es/index.js +10 -8
  79. package/dist-es/index.js.map +1 -1
  80. package/dist-es/mega-menu/MegaMenu.js +80 -0
  81. package/dist-es/mega-menu/MegaMenu.js.map +1 -0
  82. package/dist-es/mega-menu/MegaMenuContent.css.js +4 -0
  83. package/dist-es/mega-menu/MegaMenuContent.css.js.map +1 -0
  84. package/dist-es/mega-menu/MegaMenuContent.js +31 -0
  85. package/dist-es/mega-menu/MegaMenuContent.js.map +1 -0
  86. package/dist-es/mega-menu/MegaMenuContext.js +9 -0
  87. package/dist-es/mega-menu/MegaMenuContext.js.map +1 -0
  88. package/dist-es/mega-menu/MegaMenuGroup.css.js +4 -0
  89. package/dist-es/mega-menu/MegaMenuGroup.css.js.map +1 -0
  90. package/dist-es/mega-menu/MegaMenuGroup.js +56 -0
  91. package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -0
  92. package/dist-es/mega-menu/MegaMenuHeader.css.js +4 -0
  93. package/dist-es/mega-menu/MegaMenuHeader.css.js.map +1 -0
  94. package/dist-es/mega-menu/MegaMenuHeader.js +24 -0
  95. package/dist-es/mega-menu/MegaMenuHeader.js.map +1 -0
  96. package/dist-es/mega-menu/MegaMenuItem.css.js +4 -0
  97. package/dist-es/mega-menu/MegaMenuItem.css.js.map +1 -0
  98. package/dist-es/mega-menu/MegaMenuItem.js +50 -0
  99. package/dist-es/mega-menu/MegaMenuItem.js.map +1 -0
  100. package/dist-es/mega-menu/MegaMenuItemContent.css.js +4 -0
  101. package/dist-es/mega-menu/MegaMenuItemContent.css.js.map +1 -0
  102. package/dist-es/mega-menu/MegaMenuItemContent.js +21 -0
  103. package/dist-es/mega-menu/MegaMenuItemContent.js.map +1 -0
  104. package/dist-es/mega-menu/MegaMenuPanel.css.js +4 -0
  105. package/dist-es/mega-menu/MegaMenuPanel.css.js.map +1 -0
  106. package/dist-es/mega-menu/MegaMenuPanel.js +106 -0
  107. package/dist-es/mega-menu/MegaMenuPanel.js.map +1 -0
  108. package/dist-es/mega-menu/MegaMenuSection.css.js +4 -0
  109. package/dist-es/mega-menu/MegaMenuSection.css.js.map +1 -0
  110. package/dist-es/mega-menu/MegaMenuSection.js +23 -0
  111. package/dist-es/mega-menu/MegaMenuSection.js.map +1 -0
  112. package/dist-es/mega-menu/MegaMenuTrigger.js +90 -0
  113. package/dist-es/mega-menu/MegaMenuTrigger.js.map +1 -0
  114. package/dist-es/mega-menu/useMegaMenu.js +13 -0
  115. package/dist-es/mega-menu/useMegaMenu.js.map +1 -0
  116. package/dist-es/mega-menu/useMegaMenuKeyboard.js +205 -0
  117. package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +1 -0
  118. package/dist-es/side-panel/SidePanel.css.js +1 -1
  119. package/dist-es/side-panel/SidePanel.js +28 -33
  120. package/dist-es/side-panel/SidePanel.js.map +1 -1
  121. package/dist-es/side-panel/SidePanelCloseButton.js +36 -0
  122. package/dist-es/side-panel/SidePanelCloseButton.js.map +1 -0
  123. package/dist-es/side-panel/SidePanelContent.css.js +1 -1
  124. package/dist-es/side-panel/SidePanelContent.js +4 -24
  125. package/dist-es/side-panel/SidePanelContent.js.map +1 -1
  126. package/dist-es/side-panel/SidePanelHeader.css.js +1 -1
  127. package/dist-es/side-panel/SidePanelProvider.js +20 -2
  128. package/dist-es/side-panel/SidePanelProvider.js.map +1 -1
  129. package/dist-es/side-panel/SidePanelTitle.css.js +1 -1
  130. package/dist-es/side-panel/SidePanelTitle.js +1 -0
  131. package/dist-es/side-panel/SidePanelTitle.js.map +1 -1
  132. package/dist-es/side-panel/SidePanelTrigger.js +5 -5
  133. package/dist-es/side-panel/SidePanelTrigger.js.map +1 -1
  134. package/dist-es/side-panel/internal/SidePanelContext.js +3 -0
  135. package/dist-es/side-panel/internal/SidePanelContext.js.map +1 -1
  136. package/dist-es/side-panel/internal/useIsScrollable.js +48 -0
  137. package/dist-es/side-panel/internal/useIsScrollable.js.map +1 -0
  138. package/dist-es/side-panel/internal/useSidePanelTabOrder.js +119 -0
  139. package/dist-es/side-panel/internal/useSidePanelTabOrder.js.map +1 -0
  140. package/dist-es/side-panel/useSidePanel.js +3 -1
  141. package/dist-es/side-panel/useSidePanel.js.map +1 -1
  142. package/dist-es/tree/Tree.js +8 -5
  143. package/dist-es/tree/Tree.js.map +1 -1
  144. package/dist-es/tree/TreeContext.js.map +1 -1
  145. package/dist-es/tree/TreeNode.js +20 -16
  146. package/dist-es/tree/TreeNode.js.map +1 -1
  147. package/dist-es/tree/TreeNodeTrigger.js +4 -3
  148. package/dist-es/tree/TreeNodeTrigger.js.map +1 -1
  149. package/dist-es/tree/treeModel.js +57 -0
  150. package/dist-es/tree/treeModel.js.map +1 -0
  151. package/dist-es/tree/useTree.js +49 -43
  152. package/dist-es/tree/useTree.js.map +1 -1
  153. package/dist-types/index.d.ts +1 -2
  154. package/dist-types/mega-menu/MegaMenu.d.ts +27 -0
  155. package/dist-types/mega-menu/MegaMenuContent.d.ts +8 -0
  156. package/dist-types/mega-menu/MegaMenuContext.d.ts +29 -0
  157. package/dist-types/mega-menu/MegaMenuGroup.d.ts +8 -0
  158. package/dist-types/mega-menu/MegaMenuHeader.d.ts +8 -0
  159. package/dist-types/mega-menu/MegaMenuItem.d.ts +12 -0
  160. package/dist-types/mega-menu/MegaMenuItemContent.d.ts +8 -0
  161. package/dist-types/mega-menu/MegaMenuPanel.d.ts +8 -0
  162. package/dist-types/mega-menu/MegaMenuSection.d.ts +8 -0
  163. package/dist-types/mega-menu/MegaMenuTrigger.d.ts +8 -0
  164. package/dist-types/mega-menu/index.d.ts +9 -0
  165. package/dist-types/mega-menu/useMegaMenu.d.ts +6 -0
  166. package/dist-types/mega-menu/useMegaMenuKeyboard.d.ts +30 -0
  167. package/dist-types/side-panel/SidePanelCloseButton.d.ts +2 -0
  168. package/dist-types/side-panel/SidePanelTrigger.d.ts +1 -2
  169. package/dist-types/side-panel/index.d.ts +1 -0
  170. package/dist-types/side-panel/internal/SidePanelContext.d.ts +8 -0
  171. package/dist-types/side-panel/internal/index.d.ts +2 -0
  172. package/dist-types/side-panel/internal/useIsScrollable.d.ts +2 -0
  173. package/dist-types/side-panel/internal/useSidePanelTabOrder.d.ts +7 -0
  174. package/dist-types/side-panel/useSidePanel.d.ts +11 -4
  175. package/dist-types/tree/TreeContext.d.ts +7 -1
  176. package/dist-types/tree/treeModel.d.ts +24 -0
  177. package/dist-types/tree/useTree.d.ts +3 -14
  178. package/package.json +2 -4
  179. package/dist-cjs/rating/Rating.css.js +0 -6
  180. package/dist-cjs/rating/Rating.css.js.map +0 -1
  181. package/dist-cjs/rating/Rating.js +0 -132
  182. package/dist-cjs/rating/Rating.js.map +0 -1
  183. package/dist-cjs/rating/RatingItem.css.js +0 -6
  184. package/dist-cjs/rating/RatingItem.css.js.map +0 -1
  185. package/dist-cjs/rating/RatingItem.js +0 -70
  186. package/dist-cjs/rating/RatingItem.js.map +0 -1
  187. package/dist-cjs/tabs-next/TabBar.css.js +0 -6
  188. package/dist-cjs/tabs-next/TabBar.css.js.map +0 -1
  189. package/dist-cjs/tabs-next/TabBar.js +0 -41
  190. package/dist-cjs/tabs-next/TabBar.js.map +0 -1
  191. package/dist-cjs/tabs-next/TabListLayoutContext.js +0 -13
  192. package/dist-cjs/tabs-next/TabListLayoutContext.js.map +0 -1
  193. package/dist-cjs/tabs-next/TabListNext.css.js +0 -6
  194. package/dist-cjs/tabs-next/TabListNext.css.js.map +0 -1
  195. package/dist-cjs/tabs-next/TabListNext.js +0 -271
  196. package/dist-cjs/tabs-next/TabListNext.js.map +0 -1
  197. package/dist-cjs/tabs-next/TabNext.css.js +0 -6
  198. package/dist-cjs/tabs-next/TabNext.css.js.map +0 -1
  199. package/dist-cjs/tabs-next/TabNext.js +0 -213
  200. package/dist-cjs/tabs-next/TabNext.js.map +0 -1
  201. package/dist-cjs/tabs-next/TabNextAction.js +0 -58
  202. package/dist-cjs/tabs-next/TabNextAction.js.map +0 -1
  203. package/dist-cjs/tabs-next/TabNextContext.js +0 -23
  204. package/dist-cjs/tabs-next/TabNextContext.js.map +0 -1
  205. package/dist-cjs/tabs-next/TabNextPanel.css.js +0 -6
  206. package/dist-cjs/tabs-next/TabNextPanel.css.js.map +0 -1
  207. package/dist-cjs/tabs-next/TabNextPanel.js +0 -92
  208. package/dist-cjs/tabs-next/TabNextPanel.js.map +0 -1
  209. package/dist-cjs/tabs-next/TabNextTrigger.css.js +0 -6
  210. package/dist-cjs/tabs-next/TabNextTrigger.css.js.map +0 -1
  211. package/dist-cjs/tabs-next/TabNextTrigger.js +0 -180
  212. package/dist-cjs/tabs-next/TabNextTrigger.js.map +0 -1
  213. package/dist-cjs/tabs-next/TabOverflowList.css.js +0 -6
  214. package/dist-cjs/tabs-next/TabOverflowList.css.js.map +0 -1
  215. package/dist-cjs/tabs-next/TabOverflowList.js +0 -237
  216. package/dist-cjs/tabs-next/TabOverflowList.js.map +0 -1
  217. package/dist-cjs/tabs-next/TabSlot.js +0 -30
  218. package/dist-cjs/tabs-next/TabSlot.js.map +0 -1
  219. package/dist-cjs/tabs-next/TabSlotRegistryContext.js +0 -16
  220. package/dist-cjs/tabs-next/TabSlotRegistryContext.js.map +0 -1
  221. package/dist-cjs/tabs-next/TabsNext.css.js +0 -6
  222. package/dist-cjs/tabs-next/TabsNext.css.js.map +0 -1
  223. package/dist-cjs/tabs-next/TabsNext.js +0 -195
  224. package/dist-cjs/tabs-next/TabsNext.js.map +0 -1
  225. package/dist-cjs/tabs-next/TabsNextContext.js +0 -47
  226. package/dist-cjs/tabs-next/TabsNextContext.js.map +0 -1
  227. package/dist-cjs/tabs-next/domUtils.js +0 -13
  228. package/dist-cjs/tabs-next/domUtils.js.map +0 -1
  229. package/dist-cjs/tabs-next/hooks/overflowMath.js +0 -86
  230. package/dist-cjs/tabs-next/hooks/overflowMath.js.map +0 -1
  231. package/dist-cjs/tabs-next/hooks/useCollection.js +0 -197
  232. package/dist-cjs/tabs-next/hooks/useCollection.js.map +0 -1
  233. package/dist-cjs/tabs-next/hooks/useFocusWithRetry.js +0 -64
  234. package/dist-cjs/tabs-next/hooks/useFocusWithRetry.js.map +0 -1
  235. package/dist-cjs/tabs-next/hooks/useOverflow.js +0 -266
  236. package/dist-cjs/tabs-next/hooks/useOverflow.js.map +0 -1
  237. package/dist-cjs/tabs-next/hooks/useOverflowLayoutState.js +0 -99
  238. package/dist-cjs/tabs-next/hooks/useOverflowLayoutState.js.map +0 -1
  239. package/dist-cjs/tabs-next/hooks/useOverflowSelectionState.js +0 -60
  240. package/dist-cjs/tabs-next/hooks/useOverflowSelectionState.js.map +0 -1
  241. package/dist-cjs/tabs-next/hooks/useRenderedTabWidth.js +0 -92
  242. package/dist-cjs/tabs-next/hooks/useRenderedTabWidth.js.map +0 -1
  243. package/dist-cjs/tabs-next/hooks/useRenderedTabsRegistry.js +0 -200
  244. package/dist-cjs/tabs-next/hooks/useRenderedTabsRegistry.js.map +0 -1
  245. package/dist-cjs/tabs-next/hooks/useTabListRecovery.js +0 -76
  246. package/dist-cjs/tabs-next/hooks/useTabListRecovery.js.map +0 -1
  247. package/dist-cjs/tabs-next/hooks/useTabRemovalHandler.js +0 -165
  248. package/dist-cjs/tabs-next/hooks/useTabRemovalHandler.js.map +0 -1
  249. package/dist-cjs/tabs-next/hooks/useTabSelectionFocus.js +0 -80
  250. package/dist-cjs/tabs-next/hooks/useTabSelectionFocus.js.map +0 -1
  251. package/dist-cjs/tabs-next/widthMeasurement.js +0 -42
  252. package/dist-cjs/tabs-next/widthMeasurement.js.map +0 -1
  253. package/dist-es/rating/Rating.css.js +0 -4
  254. package/dist-es/rating/Rating.css.js.map +0 -1
  255. package/dist-es/rating/Rating.js +0 -130
  256. package/dist-es/rating/Rating.js.map +0 -1
  257. package/dist-es/rating/RatingItem.css.js +0 -4
  258. package/dist-es/rating/RatingItem.css.js.map +0 -1
  259. package/dist-es/rating/RatingItem.js +0 -68
  260. package/dist-es/rating/RatingItem.js.map +0 -1
  261. package/dist-es/tabs-next/TabBar.css.js +0 -4
  262. package/dist-es/tabs-next/TabBar.css.js.map +0 -1
  263. package/dist-es/tabs-next/TabBar.js +0 -39
  264. package/dist-es/tabs-next/TabBar.js.map +0 -1
  265. package/dist-es/tabs-next/TabListLayoutContext.js +0 -10
  266. package/dist-es/tabs-next/TabListLayoutContext.js.map +0 -1
  267. package/dist-es/tabs-next/TabListNext.css.js +0 -4
  268. package/dist-es/tabs-next/TabListNext.css.js.map +0 -1
  269. package/dist-es/tabs-next/TabListNext.js +0 -269
  270. package/dist-es/tabs-next/TabListNext.js.map +0 -1
  271. package/dist-es/tabs-next/TabNext.css.js +0 -4
  272. package/dist-es/tabs-next/TabNext.css.js.map +0 -1
  273. package/dist-es/tabs-next/TabNext.js +0 -211
  274. package/dist-es/tabs-next/TabNext.js.map +0 -1
  275. package/dist-es/tabs-next/TabNextAction.js +0 -56
  276. package/dist-es/tabs-next/TabNextAction.js.map +0 -1
  277. package/dist-es/tabs-next/TabNextContext.js +0 -20
  278. package/dist-es/tabs-next/TabNextContext.js.map +0 -1
  279. package/dist-es/tabs-next/TabNextPanel.css.js +0 -4
  280. package/dist-es/tabs-next/TabNextPanel.css.js.map +0 -1
  281. package/dist-es/tabs-next/TabNextPanel.js +0 -90
  282. package/dist-es/tabs-next/TabNextPanel.js.map +0 -1
  283. package/dist-es/tabs-next/TabNextTrigger.css.js +0 -4
  284. package/dist-es/tabs-next/TabNextTrigger.css.js.map +0 -1
  285. package/dist-es/tabs-next/TabNextTrigger.js +0 -178
  286. package/dist-es/tabs-next/TabNextTrigger.js.map +0 -1
  287. package/dist-es/tabs-next/TabOverflowList.css.js +0 -4
  288. package/dist-es/tabs-next/TabOverflowList.css.js.map +0 -1
  289. package/dist-es/tabs-next/TabOverflowList.js +0 -235
  290. package/dist-es/tabs-next/TabOverflowList.js.map +0 -1
  291. package/dist-es/tabs-next/TabSlot.js +0 -28
  292. package/dist-es/tabs-next/TabSlot.js.map +0 -1
  293. package/dist-es/tabs-next/TabSlotRegistryContext.js +0 -13
  294. package/dist-es/tabs-next/TabSlotRegistryContext.js.map +0 -1
  295. package/dist-es/tabs-next/TabsNext.css.js +0 -4
  296. package/dist-es/tabs-next/TabsNext.css.js.map +0 -1
  297. package/dist-es/tabs-next/TabsNext.js +0 -193
  298. package/dist-es/tabs-next/TabsNext.js.map +0 -1
  299. package/dist-es/tabs-next/TabsNextContext.js +0 -44
  300. package/dist-es/tabs-next/TabsNextContext.js.map +0 -1
  301. package/dist-es/tabs-next/domUtils.js +0 -11
  302. package/dist-es/tabs-next/domUtils.js.map +0 -1
  303. package/dist-es/tabs-next/hooks/overflowMath.js +0 -82
  304. package/dist-es/tabs-next/hooks/overflowMath.js.map +0 -1
  305. package/dist-es/tabs-next/hooks/useCollection.js +0 -195
  306. package/dist-es/tabs-next/hooks/useCollection.js.map +0 -1
  307. package/dist-es/tabs-next/hooks/useFocusWithRetry.js +0 -62
  308. package/dist-es/tabs-next/hooks/useFocusWithRetry.js.map +0 -1
  309. package/dist-es/tabs-next/hooks/useOverflow.js +0 -264
  310. package/dist-es/tabs-next/hooks/useOverflow.js.map +0 -1
  311. package/dist-es/tabs-next/hooks/useOverflowLayoutState.js +0 -97
  312. package/dist-es/tabs-next/hooks/useOverflowLayoutState.js.map +0 -1
  313. package/dist-es/tabs-next/hooks/useOverflowSelectionState.js +0 -58
  314. package/dist-es/tabs-next/hooks/useOverflowSelectionState.js.map +0 -1
  315. package/dist-es/tabs-next/hooks/useRenderedTabWidth.js +0 -90
  316. package/dist-es/tabs-next/hooks/useRenderedTabWidth.js.map +0 -1
  317. package/dist-es/tabs-next/hooks/useRenderedTabsRegistry.js +0 -198
  318. package/dist-es/tabs-next/hooks/useRenderedTabsRegistry.js.map +0 -1
  319. package/dist-es/tabs-next/hooks/useTabListRecovery.js +0 -74
  320. package/dist-es/tabs-next/hooks/useTabListRecovery.js.map +0 -1
  321. package/dist-es/tabs-next/hooks/useTabRemovalHandler.js +0 -163
  322. package/dist-es/tabs-next/hooks/useTabRemovalHandler.js.map +0 -1
  323. package/dist-es/tabs-next/hooks/useTabSelectionFocus.js +0 -78
  324. package/dist-es/tabs-next/hooks/useTabSelectionFocus.js.map +0 -1
  325. package/dist-es/tabs-next/widthMeasurement.js +0 -36
  326. package/dist-es/tabs-next/widthMeasurement.js.map +0 -1
  327. package/dist-types/rating/Rating.d.ts +0 -48
  328. package/dist-types/rating/RatingItem.d.ts +0 -47
  329. package/dist-types/rating/index.d.ts +0 -1
  330. package/dist-types/tabs-next/TabBar.d.ts +0 -12
  331. package/dist-types/tabs-next/TabListLayoutContext.d.ts +0 -9
  332. package/dist-types/tabs-next/TabListNext.d.ts +0 -12
  333. package/dist-types/tabs-next/TabNext.d.ts +0 -12
  334. package/dist-types/tabs-next/TabNextAction.d.ts +0 -4
  335. package/dist-types/tabs-next/TabNextContext.d.ts +0 -12
  336. package/dist-types/tabs-next/TabNextPanel.d.ts +0 -9
  337. package/dist-types/tabs-next/TabNextTrigger.d.ts +0 -4
  338. package/dist-types/tabs-next/TabOverflowList.d.ts +0 -10
  339. package/dist-types/tabs-next/TabSlot.d.ts +0 -6
  340. package/dist-types/tabs-next/TabSlotRegistryContext.d.ts +0 -5
  341. package/dist-types/tabs-next/TabsNext.d.ts +0 -18
  342. package/dist-types/tabs-next/TabsNextContext.d.ts +0 -43
  343. package/dist-types/tabs-next/domUtils.d.ts +0 -1
  344. package/dist-types/tabs-next/hooks/overflowMath.d.ts +0 -18
  345. package/dist-types/tabs-next/hooks/useCollection.d.ts +0 -30
  346. package/dist-types/tabs-next/hooks/useFocusWithRetry.d.ts +0 -9
  347. package/dist-types/tabs-next/hooks/useOverflow.d.ts +0 -11
  348. package/dist-types/tabs-next/hooks/useOverflowLayoutState.d.ts +0 -13
  349. package/dist-types/tabs-next/hooks/useOverflowSelectionState.d.ts +0 -13
  350. package/dist-types/tabs-next/hooks/useRenderedTabWidth.d.ts +0 -12
  351. package/dist-types/tabs-next/hooks/useRenderedTabsRegistry.d.ts +0 -12
  352. package/dist-types/tabs-next/hooks/useTabListRecovery.d.ts +0 -12
  353. package/dist-types/tabs-next/hooks/useTabRemovalHandler.d.ts +0 -32
  354. package/dist-types/tabs-next/hooks/useTabSelectionFocus.d.ts +0 -15
  355. package/dist-types/tabs-next/index.d.ts +0 -7
  356. package/dist-types/tabs-next/widthMeasurement.d.ts +0 -5
@@ -1,92 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var widthMeasurement = require('../widthMeasurement.js');
5
-
6
- const MIN_TRUSTED_RENDERED_TAB_WIDTH = 0.5;
7
- function isSecondaryMeasurementContext(element) {
8
- return element.closest(".saltTabOverflow-list") || element.closest(".saltTabListNext-measureContainer");
9
- }
10
- function useRenderedTabWidth({
11
- hostElement,
12
- renderMode,
13
- tabRootRef,
14
- targetWindow,
15
- updateRenderedTab,
16
- value
17
- }) {
18
- react.useEffect(() => {
19
- if (!hostElement) {
20
- return;
21
- }
22
- const element = tabRootRef.current;
23
- const resizeObserverCtor = targetWindow == null ? void 0 : targetWindow.ResizeObserver;
24
- const mutationObserverCtor = targetWindow == null ? void 0 : targetWindow.MutationObserver;
25
- if (!element || !resizeObserverCtor) {
26
- return;
27
- }
28
- const updateWidth = (allowSecondaryMeasurementContext = false) => {
29
- if (!element.isConnected) {
30
- return;
31
- }
32
- if (!allowSecondaryMeasurementContext && isSecondaryMeasurementContext(element)) {
33
- return;
34
- }
35
- const width = widthMeasurement.getIntrinsicMeasuredWidth(element);
36
- if (width <= MIN_TRUSTED_RENDERED_TAB_WIDTH) {
37
- return;
38
- }
39
- updateRenderedTab(value, {
40
- width
41
- });
42
- };
43
- let animationFrameId = null;
44
- const scheduleWidthUpdate = (allowSecondaryMeasurementContext = false) => {
45
- if (!(targetWindow == null ? void 0 : targetWindow.requestAnimationFrame)) {
46
- updateWidth(allowSecondaryMeasurementContext);
47
- return;
48
- }
49
- if (animationFrameId != null) {
50
- targetWindow.cancelAnimationFrame(animationFrameId);
51
- }
52
- animationFrameId = targetWindow.requestAnimationFrame(() => {
53
- animationFrameId = null;
54
- updateWidth(allowSecondaryMeasurementContext);
55
- });
56
- };
57
- if (renderMode === "portal") {
58
- scheduleWidthUpdate(true);
59
- } else {
60
- updateWidth(true);
61
- }
62
- const resizeObserver = new resizeObserverCtor(() => {
63
- updateWidth();
64
- });
65
- resizeObserver.observe(element);
66
- const mutationObserver = mutationObserverCtor ? new mutationObserverCtor(() => {
67
- scheduleWidthUpdate();
68
- }) : null;
69
- mutationObserver == null ? void 0 : mutationObserver.observe(element, {
70
- childList: true,
71
- characterData: true,
72
- subtree: true
73
- });
74
- return () => {
75
- if (animationFrameId != null && targetWindow) {
76
- targetWindow.cancelAnimationFrame(animationFrameId);
77
- }
78
- mutationObserver == null ? void 0 : mutationObserver.disconnect();
79
- resizeObserver.disconnect();
80
- };
81
- }, [
82
- hostElement,
83
- renderMode,
84
- tabRootRef,
85
- targetWindow,
86
- updateRenderedTab,
87
- value
88
- ]);
89
- }
90
-
91
- exports.useRenderedTabWidth = useRenderedTabWidth;
92
- //# sourceMappingURL=useRenderedTabWidth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRenderedTabWidth.js","sources":["../src/tabs-next/hooks/useRenderedTabWidth.ts"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\nimport type {\n TabsNextContextValue,\n TabsNextRenderMode,\n} from \"../TabsNextContext\";\nimport { getIntrinsicMeasuredWidth } from \"../widthMeasurement\";\n\nconst MIN_TRUSTED_RENDERED_TAB_WIDTH = 0.5;\n\ninterface UseRenderedTabWidthProps {\n hostElement: HTMLDivElement | null;\n renderMode: TabsNextRenderMode;\n tabRootRef: RefObject<HTMLDivElement>;\n targetWindow: Window | null | undefined;\n updateRenderedTab: TabsNextContextValue[\"updateRenderedTab\"];\n value: string;\n}\n\nfunction isSecondaryMeasurementContext(element: HTMLElement) {\n return (\n element.closest(\".saltTabOverflow-list\") ||\n element.closest(\".saltTabListNext-measureContainer\")\n );\n}\n\nexport function useRenderedTabWidth({\n hostElement,\n renderMode,\n tabRootRef,\n targetWindow,\n updateRenderedTab,\n value,\n}: UseRenderedTabWidthProps) {\n useEffect(() => {\n if (!hostElement) {\n return;\n }\n\n const element = tabRootRef.current;\n const resizeObserverCtor = (\n targetWindow as\n | (Window & { ResizeObserver?: typeof ResizeObserver })\n | undefined\n )?.ResizeObserver;\n const mutationObserverCtor = (\n targetWindow as\n | (Window & { MutationObserver?: typeof MutationObserver })\n | undefined\n )?.MutationObserver;\n if (!element || !resizeObserverCtor) {\n return;\n }\n\n const updateWidth = (allowSecondaryMeasurementContext = false) => {\n if (!element.isConnected) {\n return;\n }\n\n // Preserve the strip width while a tab is rendered in the overflow menu.\n // Overflow items stretch to the menu width, and hidden measurement tabs\n // can collapse to a different intrinsic size. Neither width is suitable\n // for deciding whether the tab fits back in the main strip once the tab\n // is already established. A one-time seeded width is still useful for\n // newly mounted tabs before they have ever appeared in the main strip.\n if (\n !allowSecondaryMeasurementContext &&\n isSecondaryMeasurementContext(element)\n ) {\n return;\n }\n\n const width = getIntrinsicMeasuredWidth(element);\n if (width <= MIN_TRUSTED_RENDERED_TAB_WIDTH) {\n return;\n }\n\n updateRenderedTab(value, {\n width,\n });\n };\n\n let animationFrameId: number | null = null;\n const scheduleWidthUpdate = (allowSecondaryMeasurementContext = false) => {\n if (!targetWindow?.requestAnimationFrame) {\n updateWidth(allowSecondaryMeasurementContext);\n return;\n }\n\n if (animationFrameId != null) {\n targetWindow.cancelAnimationFrame(animationFrameId);\n }\n\n animationFrameId = targetWindow.requestAnimationFrame(() => {\n animationFrameId = null;\n updateWidth(allowSecondaryMeasurementContext);\n });\n };\n\n if (renderMode === \"portal\") {\n scheduleWidthUpdate(true);\n } else {\n updateWidth(true);\n }\n\n const resizeObserver = new resizeObserverCtor(() => {\n updateWidth();\n });\n\n resizeObserver.observe(element);\n const mutationObserver = mutationObserverCtor\n ? new mutationObserverCtor(() => {\n scheduleWidthUpdate();\n })\n : null;\n\n mutationObserver?.observe(element, {\n childList: true,\n characterData: true,\n subtree: true,\n });\n\n return () => {\n if (animationFrameId != null && targetWindow) {\n targetWindow.cancelAnimationFrame(animationFrameId);\n }\n mutationObserver?.disconnect();\n resizeObserver.disconnect();\n };\n }, [\n hostElement,\n renderMode,\n tabRootRef,\n targetWindow,\n updateRenderedTab,\n value,\n ]);\n}\n"],"names":["useEffect","getIntrinsicMeasuredWidth"],"mappings":"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"}
@@ -1,200 +0,0 @@
1
- 'use strict';
2
-
3
- var core = require('@salt-ds/core');
4
- var react = require('react');
5
- var widthMeasurement = require('../widthMeasurement.js');
6
-
7
- function sortRenderedTabs(tabs) {
8
- return [...tabs].sort((tabA, tabB) => {
9
- if (tabA.marker === tabB.marker) {
10
- return 0;
11
- }
12
- if (!tabA.marker || !tabB.marker) {
13
- return 0;
14
- }
15
- const position = tabA.marker.compareDocumentPosition(tabB.marker);
16
- if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
17
- return -1;
18
- }
19
- if (position & Node.DOCUMENT_POSITION_PRECEDING) {
20
- return 1;
21
- }
22
- return 0;
23
- });
24
- }
25
- function useRenderedTabsRegistry() {
26
- const [renderedTabMap, setRenderedTabMap] = react.useState(
27
- () => /* @__PURE__ */ new Map()
28
- );
29
- const [renderMode, setRenderMode] = react.useState("inline");
30
- const [bootstrapTabs, setBootstrapTabs] = react.useState(() => /* @__PURE__ */ new Set());
31
- const [readyBootstrapTabs, setReadyBootstrapTabs] = react.useState(
32
- () => /* @__PURE__ */ new Set()
33
- );
34
- const [bootstrapOverflowReady, setBootstrapOverflowReadyState] = react.useState(false);
35
- const registerBootstrapTab = react.useCallback((tabValue) => {
36
- setBootstrapTabs((currentTabs) => {
37
- if (currentTabs.has(tabValue)) {
38
- return currentTabs;
39
- }
40
- const nextTabs = new Set(currentTabs);
41
- nextTabs.add(tabValue);
42
- return nextTabs;
43
- });
44
- return () => {
45
- setBootstrapTabs((currentTabs) => {
46
- if (!currentTabs.has(tabValue)) {
47
- return currentTabs;
48
- }
49
- const nextTabs = new Set(currentTabs);
50
- nextTabs.delete(tabValue);
51
- return nextTabs;
52
- });
53
- setReadyBootstrapTabs((currentTabs) => {
54
- if (!currentTabs.has(tabValue)) {
55
- return currentTabs;
56
- }
57
- const nextTabs = new Set(currentTabs);
58
- nextTabs.delete(tabValue);
59
- return nextTabs;
60
- });
61
- };
62
- }, []);
63
- const setBootstrapTabReady = react.useCallback(
64
- (tabValue, ready) => {
65
- setReadyBootstrapTabs((currentTabs) => {
66
- const hasTab = currentTabs.has(tabValue);
67
- if (ready === hasTab) {
68
- return currentTabs;
69
- }
70
- const nextTabs = new Set(currentTabs);
71
- if (ready) {
72
- nextTabs.add(tabValue);
73
- } else {
74
- nextTabs.delete(tabValue);
75
- }
76
- return nextTabs;
77
- });
78
- },
79
- []
80
- );
81
- const setBootstrapOverflowReady = react.useCallback((ready) => {
82
- setBootstrapOverflowReadyState((currentReady) => {
83
- if (currentReady === ready) {
84
- return currentReady;
85
- }
86
- return ready;
87
- });
88
- }, []);
89
- core.useIsomorphicLayoutEffect(() => {
90
- if (renderMode === "portal" || bootstrapTabs.size < 1) {
91
- return;
92
- }
93
- if (!bootstrapOverflowReady) {
94
- return;
95
- }
96
- for (const tabValue of bootstrapTabs) {
97
- if (!readyBootstrapTabs.has(tabValue)) {
98
- return;
99
- }
100
- const renderedTab = renderedTabMap.get(tabValue);
101
- if (!renderedTab || widthMeasurement.getMeasuredWidth(renderedTab.root) <= 0) {
102
- return;
103
- }
104
- }
105
- setRenderMode("portal");
106
- }, [
107
- bootstrapOverflowReady,
108
- bootstrapTabs,
109
- readyBootstrapTabs,
110
- renderMode,
111
- renderedTabMap
112
- ]);
113
- const registerRenderedTab = react.useCallback((tab) => {
114
- setRenderedTabMap((map) => {
115
- const existing = map.get(tab.value);
116
- if (process.env.NODE_ENV !== "production" && existing && existing.id !== tab.id) {
117
- console.warn(
118
- `TabsNext received duplicate tab value "${tab.value}". Tab values must be unique within a TabsNext instance.`
119
- );
120
- }
121
- if (existing === tab) {
122
- return map;
123
- }
124
- const next = new Map(map);
125
- next.set(tab.value, tab);
126
- return next;
127
- });
128
- return () => {
129
- setRenderedTabMap((map) => {
130
- const existing = map.get(tab.value);
131
- if (!existing || existing.id !== tab.id) {
132
- return map;
133
- }
134
- const next = new Map(map);
135
- next.delete(tab.value);
136
- return next;
137
- });
138
- };
139
- }, []);
140
- const updateRenderedTab = react.useCallback(
141
- (value, updates) => {
142
- setRenderedTabMap((map) => {
143
- const existing = map.get(value);
144
- if (!existing) {
145
- return map;
146
- }
147
- let changed = false;
148
- const nextRecord = { ...existing };
149
- for (const [key, nextValue] of Object.entries(updates)) {
150
- const typedKey = key;
151
- if (nextRecord[typedKey] !== nextValue) {
152
- changed = true;
153
- nextRecord[typedKey] = nextValue;
154
- }
155
- }
156
- if (!changed) {
157
- return map;
158
- }
159
- const next = new Map(map);
160
- next.set(value, nextRecord);
161
- return next;
162
- });
163
- },
164
- []
165
- );
166
- const getRenderedTab = react.useCallback(
167
- (value) => {
168
- return renderedTabMap.get(value);
169
- },
170
- [renderedTabMap]
171
- );
172
- const renderedTabs = react.useMemo(() => {
173
- return sortRenderedTabs(Array.from(renderedTabMap.values()));
174
- }, [renderedTabMap]);
175
- const renderedTabOrderMap = react.useMemo(() => {
176
- return new Map(
177
- renderedTabs.map((tab, index) => [tab.value, index])
178
- );
179
- }, [renderedTabs]);
180
- const getRenderedTabOrder = react.useCallback(
181
- (value) => {
182
- return renderedTabOrderMap.get(value) ?? -1;
183
- },
184
- [renderedTabOrderMap]
185
- );
186
- return {
187
- renderMode,
188
- registerBootstrapTab,
189
- setBootstrapTabReady,
190
- setBootstrapOverflowReady,
191
- registerRenderedTab,
192
- updateRenderedTab,
193
- getRenderedTab,
194
- getRenderedTabOrder,
195
- renderedTabs
196
- };
197
- }
198
-
199
- exports.useRenderedTabsRegistry = useRenderedTabsRegistry;
200
- //# sourceMappingURL=useRenderedTabsRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRenderedTabsRegistry.js","sources":["../src/tabs-next/hooks/useRenderedTabsRegistry.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { RenderedTab, TabsNextRenderMode } from \"../TabsNextContext\";\nimport { getMeasuredWidth } from \"../widthMeasurement\";\n\nfunction sortRenderedTabs(tabs: RenderedTab[]) {\n return [...tabs].sort((tabA, tabB) => {\n if (tabA.marker === tabB.marker) {\n return 0;\n }\n if (!tabA.marker || !tabB.marker) {\n return 0;\n }\n\n const position = tabA.marker.compareDocumentPosition(tabB.marker);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n return 0;\n });\n}\n\nexport function useRenderedTabsRegistry() {\n const [renderedTabMap, setRenderedTabMap] = useState(\n () => new Map<string, RenderedTab>(),\n );\n const [renderMode, setRenderMode] = useState<TabsNextRenderMode>(\"inline\");\n const [bootstrapTabs, setBootstrapTabs] = useState(() => new Set<string>());\n const [readyBootstrapTabs, setReadyBootstrapTabs] = useState(\n () => new Set<string>(),\n );\n const [bootstrapOverflowReady, setBootstrapOverflowReadyState] =\n useState(false);\n\n const registerBootstrapTab = useCallback((tabValue: string) => {\n setBootstrapTabs((currentTabs) => {\n if (currentTabs.has(tabValue)) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n nextTabs.add(tabValue);\n return nextTabs;\n });\n\n return () => {\n setBootstrapTabs((currentTabs) => {\n if (!currentTabs.has(tabValue)) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n nextTabs.delete(tabValue);\n return nextTabs;\n });\n setReadyBootstrapTabs((currentTabs) => {\n if (!currentTabs.has(tabValue)) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n nextTabs.delete(tabValue);\n return nextTabs;\n });\n };\n }, []);\n\n const setBootstrapTabReady = useCallback(\n (tabValue: string, ready: boolean) => {\n setReadyBootstrapTabs((currentTabs) => {\n const hasTab = currentTabs.has(tabValue);\n if (ready === hasTab) {\n return currentTabs;\n }\n\n const nextTabs = new Set(currentTabs);\n if (ready) {\n nextTabs.add(tabValue);\n } else {\n nextTabs.delete(tabValue);\n }\n return nextTabs;\n });\n },\n [],\n );\n\n const setBootstrapOverflowReady = useCallback((ready: boolean) => {\n setBootstrapOverflowReadyState((currentReady) => {\n if (currentReady === ready) {\n return currentReady;\n }\n\n return ready;\n });\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (renderMode === \"portal\" || bootstrapTabs.size < 1) {\n return;\n }\n\n if (!bootstrapOverflowReady) {\n return;\n }\n\n for (const tabValue of bootstrapTabs) {\n if (!readyBootstrapTabs.has(tabValue)) {\n return;\n }\n\n const renderedTab = renderedTabMap.get(tabValue);\n if (!renderedTab || getMeasuredWidth(renderedTab.root) <= 0) {\n return;\n }\n }\n\n setRenderMode(\"portal\");\n }, [\n bootstrapOverflowReady,\n bootstrapTabs,\n readyBootstrapTabs,\n renderMode,\n renderedTabMap,\n ]);\n\n const registerRenderedTab = useCallback((tab: RenderedTab) => {\n setRenderedTabMap((map) => {\n const existing = map.get(tab.value);\n if (\n process.env.NODE_ENV !== \"production\" &&\n existing &&\n existing.id !== tab.id\n ) {\n console.warn(\n `TabsNext received duplicate tab value \"${tab.value}\". Tab values must be unique within a TabsNext instance.`,\n );\n }\n\n if (existing === tab) {\n return map;\n }\n\n const next = new Map(map);\n next.set(tab.value, tab);\n return next;\n });\n\n return () => {\n setRenderedTabMap((map) => {\n const existing = map.get(tab.value);\n if (!existing || existing.id !== tab.id) {\n return map;\n }\n\n const next = new Map(map);\n next.delete(tab.value);\n return next;\n });\n };\n }, []);\n\n const updateRenderedTab = useCallback(\n (value: string, updates: Partial<Omit<RenderedTab, \"value\">>) => {\n setRenderedTabMap((map) => {\n const existing = map.get(value);\n if (!existing) {\n return map;\n }\n\n let changed = false;\n const nextRecord = { ...existing };\n for (const [key, nextValue] of Object.entries(updates)) {\n const typedKey = key as keyof Omit<RenderedTab, \"value\">;\n if (nextRecord[typedKey] !== nextValue) {\n changed = true;\n nextRecord[typedKey] = nextValue as never;\n }\n }\n\n if (!changed) {\n return map;\n }\n\n const next = new Map(map);\n next.set(value, nextRecord);\n return next;\n });\n },\n [],\n );\n\n const getRenderedTab = useCallback(\n (value: string) => {\n return renderedTabMap.get(value);\n },\n [renderedTabMap],\n );\n\n const renderedTabs = useMemo(() => {\n return sortRenderedTabs(Array.from(renderedTabMap.values()));\n }, [renderedTabMap]);\n\n const renderedTabOrderMap = useMemo(() => {\n return new Map(\n renderedTabs.map((tab, index) => [tab.value, index] as const),\n );\n }, [renderedTabs]);\n\n const getRenderedTabOrder = useCallback(\n (value: string) => {\n return renderedTabOrderMap.get(value) ?? -1;\n },\n [renderedTabOrderMap],\n );\n\n return {\n renderMode,\n registerBootstrapTab,\n setBootstrapTabReady,\n setBootstrapOverflowReady,\n registerRenderedTab,\n updateRenderedTab,\n getRenderedTab,\n getRenderedTabOrder,\n renderedTabs,\n };\n}\n"],"names":["useState","useCallback","useIsomorphicLayoutEffect","getMeasuredWidth","useMemo"],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var domUtils = require('../domUtils.js');
5
-
6
- function useTabListRecovery({
7
- removalVersion,
8
- targetWindow,
9
- tabstripRef,
10
- overflowListRef,
11
- handleTabRemoval,
12
- pendingRemovalRecoveryRef,
13
- pendingRemovalRecoveryRetriesRef
14
- }) {
15
- react.useEffect(() => {
16
- if (removalVersion < 1) {
17
- return;
18
- }
19
- pendingRemovalRecoveryRef.current = true;
20
- pendingRemovalRecoveryRetriesRef.current = 0;
21
- const raf = targetWindow == null ? void 0 : targetWindow.requestAnimationFrame(() => {
22
- handleTabRemoval();
23
- });
24
- return () => {
25
- if (raf != null) {
26
- targetWindow == null ? void 0 : targetWindow.cancelAnimationFrame(raf);
27
- }
28
- };
29
- }, [
30
- handleTabRemoval,
31
- pendingRemovalRecoveryRef,
32
- pendingRemovalRecoveryRetriesRef,
33
- removalVersion,
34
- targetWindow
35
- ]);
36
- react.useEffect(() => {
37
- const isInTabList = (node) => {
38
- var _a, _b;
39
- if (!node) {
40
- return false;
41
- }
42
- return (((_a = tabstripRef.current) == null ? void 0 : _a.contains(node)) ?? false) || (((_b = overflowListRef.current) == null ? void 0 : _b.contains(node)) ?? false);
43
- };
44
- const handleFocusOut = (event) => {
45
- if (!pendingRemovalRecoveryRef.current) {
46
- return;
47
- }
48
- const wasInTabList = domUtils.isHTMLElement(event.target) && isInTabList(event.target);
49
- const stillInTabList = domUtils.isHTMLElement(event.relatedTarget) && isInTabList(event.relatedTarget);
50
- if (wasInTabList && !stillInTabList) {
51
- if (targetWindow == null ? void 0 : targetWindow.requestAnimationFrame) {
52
- targetWindow.requestAnimationFrame(() => handleTabRemoval());
53
- } else {
54
- queueMicrotask(() => handleTabRemoval());
55
- }
56
- }
57
- };
58
- targetWindow == null ? void 0 : targetWindow.document.addEventListener("focusout", handleFocusOut, true);
59
- return () => {
60
- targetWindow == null ? void 0 : targetWindow.document.removeEventListener(
61
- "focusout",
62
- handleFocusOut,
63
- true
64
- );
65
- };
66
- }, [
67
- handleTabRemoval,
68
- overflowListRef,
69
- pendingRemovalRecoveryRef,
70
- tabstripRef,
71
- targetWindow
72
- ]);
73
- }
74
-
75
- exports.useTabListRecovery = useTabListRecovery;
76
- //# sourceMappingURL=useTabListRecovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTabListRecovery.js","sources":["../src/tabs-next/hooks/useTabListRecovery.ts"],"sourcesContent":["import { type MutableRefObject, type RefObject, useEffect } from \"react\";\nimport { isHTMLElement } from \"../domUtils\";\n\ninterface UseTabListRecoveryArgs {\n removalVersion: number;\n targetWindow: Window | null | undefined;\n tabstripRef: RefObject<HTMLDivElement | null>;\n overflowListRef: RefObject<HTMLDivElement | null>;\n handleTabRemoval: () => void;\n pendingRemovalRecoveryRef: MutableRefObject<boolean>;\n pendingRemovalRecoveryRetriesRef: MutableRefObject<number>;\n}\n\nexport function useTabListRecovery({\n removalVersion,\n targetWindow,\n tabstripRef,\n overflowListRef,\n handleTabRemoval,\n pendingRemovalRecoveryRef,\n pendingRemovalRecoveryRetriesRef,\n}: UseTabListRecoveryArgs) {\n useEffect(() => {\n if (removalVersion < 1) {\n return;\n }\n\n pendingRemovalRecoveryRef.current = true;\n pendingRemovalRecoveryRetriesRef.current = 0;\n\n const raf = targetWindow?.requestAnimationFrame(() => {\n handleTabRemoval();\n });\n\n return () => {\n if (raf != null) {\n targetWindow?.cancelAnimationFrame(raf);\n }\n };\n }, [\n handleTabRemoval,\n pendingRemovalRecoveryRef,\n pendingRemovalRecoveryRetriesRef,\n removalVersion,\n targetWindow,\n ]);\n\n useEffect(() => {\n const isInTabList = (node: HTMLElement | null) => {\n if (!node) {\n return false;\n }\n\n return (\n (tabstripRef.current?.contains(node) ?? false) ||\n (overflowListRef.current?.contains(node) ?? false)\n );\n };\n\n const handleFocusOut = (event: FocusEvent) => {\n if (!pendingRemovalRecoveryRef.current) {\n return;\n }\n\n const wasInTabList =\n isHTMLElement(event.target) && isInTabList(event.target);\n const stillInTabList =\n isHTMLElement(event.relatedTarget) && isInTabList(event.relatedTarget);\n\n if (wasInTabList && !stillInTabList) {\n if (targetWindow?.requestAnimationFrame) {\n targetWindow.requestAnimationFrame(() => handleTabRemoval());\n } else {\n queueMicrotask(() => handleTabRemoval());\n }\n }\n };\n\n targetWindow?.document.addEventListener(\"focusout\", handleFocusOut, true);\n\n return () => {\n targetWindow?.document.removeEventListener(\n \"focusout\",\n handleFocusOut,\n true,\n );\n };\n }, [\n handleTabRemoval,\n overflowListRef,\n pendingRemovalRecoveryRef,\n tabstripRef,\n targetWindow,\n ]);\n}\n"],"names":["useEffect","isHTMLElement"],"mappings":";;;;;AAaO,SAAS,kBAAA,CAAmB;AAAA,EACjC,cAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,yBAAA,CAA0B,OAAA,GAAU,IAAA;AACpC,IAAA,gCAAA,CAAiC,OAAA,GAAU,CAAA;AAE3C,IAAA,MAAM,GAAA,GAAM,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,qBAAA,CAAsB,MAAM;AACpD,MAAA,gBAAA,EAAiB;AAAA,IACnB,CAAA,CAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,oBAAA,CAAqB,GAAA,CAAA;AAAA,MACrC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,gBAAA;AAAA,IACA,yBAAA;AAAA,IACA,gCAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAA6B;AAhDtD,MAAA,IAAA,EAAA,EAAA,EAAA;AAiDM,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,OAAA,CAAA,CAAA,CACG,EAAA,GAAA,WAAA,CAAY,OAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,QAAA,CAAS,IAAA,CAAA,KAAS,aACvC,EAAA,GAAA,eAAA,CAAgB,OAAA,KAAhB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,QAAA,CAAS,IAAA,CAAA,KAAS,KAAA,CAAA;AAAA,IAEhD,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAsB;AAC5C,MAAA,IAAI,CAAC,0BAA0B,OAAA,EAAS;AACtC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,eACJC,sBAAA,CAAc,KAAA,CAAM,MAAM,CAAA,IAAK,WAAA,CAAY,MAAM,MAAM,CAAA;AACzD,MAAA,MAAM,iBACJA,sBAAA,CAAc,KAAA,CAAM,aAAa,CAAA,IAAK,WAAA,CAAY,MAAM,aAAa,CAAA;AAEvE,MAAA,IAAI,YAAA,IAAgB,CAAC,cAAA,EAAgB;AACnC,QAAA,IAAI,6CAAc,qBAAA,EAAuB;AACvC,UAAA,YAAA,CAAa,qBAAA,CAAsB,MAAM,gBAAA,EAAkB,CAAA;AAAA,QAC7D,CAAA,MAAO;AACL,UAAA,cAAA,CAAe,MAAM,kBAAkB,CAAA;AAAA,QACzC;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,QAAA,CAAS,gBAAA,CAAiB,UAAA,EAAY,cAAA,EAAgB,IAAA,CAAA;AAEpE,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,QAAA,CAAS,mBAAA;AAAA,QACrB,UAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OAAA;AAAA,IAEJ,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,yBAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;;;;"}
@@ -1,165 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var useEventCallback = require('../../utils/useEventCallback.js');
5
- var domUtils = require('../domUtils.js');
6
-
7
- function hasLostDocumentFocus(doc) {
8
- const activeElement = doc.activeElement;
9
- return !activeElement || activeElement === doc.body || activeElement === doc.documentElement || !activeElement.isConnected;
10
- }
11
- function getVisibleSelectedTab(tabstrip, excludedId) {
12
- if (!tabstrip) {
13
- return null;
14
- }
15
- const tabs = tabstrip.querySelectorAll(
16
- ':scope > [data-tabslot] [role="tab"][aria-selected="true"]'
17
- );
18
- return Array.from(tabs).find((tab) => {
19
- if (excludedId && tab.id === excludedId) {
20
- return false;
21
- }
22
- return tab.isConnected;
23
- }) ?? null;
24
- }
25
- function useTabRemovalHandler({
26
- activeTab,
27
- focusElementWithRetry,
28
- getFirst,
29
- getIndex,
30
- getLast,
31
- getRemovedItems,
32
- getRenderedTab,
33
- getSelectedTabElement,
34
- item,
35
- itemAt,
36
- maxRetryAttempts,
37
- menuOpen,
38
- overflowButtonRef,
39
- overflowListRef,
40
- pendingRemovalRecoveryRef,
41
- pendingRemovalRecoveryRetriesRef,
42
- removalRecoveryRafRef,
43
- selected,
44
- setSelected,
45
- tabstripRef,
46
- targetWindow
47
- }) {
48
- const clearPendingRemovalRecovery = react.useCallback(() => {
49
- pendingRemovalRecoveryRef.current = false;
50
- pendingRemovalRecoveryRetriesRef.current = 0;
51
- }, [pendingRemovalRecoveryRef, pendingRemovalRecoveryRetriesRef]);
52
- const handleTabRemoval = useEventCallback.useEventCallback(() => {
53
- var _a;
54
- const doc = targetWindow == null ? void 0 : targetWindow.document;
55
- if (!doc) return;
56
- const activeTabWasSelected = ((_a = activeTab.current) == null ? void 0 : _a.value) === selected;
57
- const shouldRecoverFocus = () => {
58
- var _a2, _b;
59
- if (hasLostDocumentFocus(doc)) return true;
60
- const activeElement = doc.activeElement;
61
- if (!domUtils.isHTMLElement(activeElement)) return false;
62
- if (!menuOpen) {
63
- if (activeElement === overflowButtonRef.current) {
64
- return activeTabWasSelected;
65
- }
66
- return ((_a2 = tabstripRef.current) == null ? void 0 : _a2.contains(activeElement)) && activeElement.getAttribute("role") !== "tab";
67
- }
68
- if (activeElement === overflowButtonRef.current) {
69
- return true;
70
- }
71
- if ((_b = overflowListRef.current) == null ? void 0 : _b.contains(activeElement)) {
72
- return activeElement.getAttribute("role") !== "tab";
73
- }
74
- return false;
75
- };
76
- if (!shouldRecoverFocus()) {
77
- if (pendingRemovalRecoveryRef.current && removalRecoveryRafRef.current == null) {
78
- if (pendingRemovalRecoveryRetriesRef.current < maxRetryAttempts) {
79
- pendingRemovalRecoveryRetriesRef.current += 1;
80
- if (!(targetWindow == null ? void 0 : targetWindow.requestAnimationFrame)) {
81
- handleTabRemoval();
82
- return;
83
- }
84
- removalRecoveryRafRef.current = targetWindow.requestAnimationFrame(
85
- () => {
86
- removalRecoveryRafRef.current = null;
87
- handleTabRemoval();
88
- }
89
- );
90
- } else {
91
- clearPendingRemovalRecovery();
92
- }
93
- }
94
- return;
95
- }
96
- if (!activeTab.current) {
97
- clearPendingRemovalRecovery();
98
- return;
99
- }
100
- const removedItems = getRemovedItems();
101
- const removed = removedItems.get(activeTab.current.id);
102
- if (!removed) {
103
- clearPendingRemovalRecovery();
104
- return;
105
- }
106
- clearPendingRemovalRecovery();
107
- const removedWasSelected = removed.value === selected;
108
- const baseIndex = removed.staleIndex ?? -1;
109
- const removedId = removed.id;
110
- const restoreFocus = () => {
111
- var _a2;
112
- const restoredTab = item(removedId);
113
- const restoredRenderedTab = getRenderedTab(removed.value);
114
- const focusMovedToOverflowButton = doc.activeElement === overflowButtonRef.current;
115
- if (((_a2 = restoredTab == null ? void 0 : restoredTab.element) == null ? void 0 : _a2.isConnected) && (restoredRenderedTab == null ? void 0 : restoredRenderedTab.trigger) === restoredTab.element && !(removedWasSelected && focusMovedToOverflowButton)) {
116
- if (shouldRecoverFocus()) {
117
- focusElementWithRetry(() => {
118
- var _a3;
119
- return (_a3 = item(removedId)) == null ? void 0 : _a3.element;
120
- });
121
- }
122
- return;
123
- }
124
- if (!shouldRecoverFocus()) {
125
- return;
126
- }
127
- let nextTab = (baseIndex >= 0 ? itemAt(baseIndex) : null) ?? (baseIndex > 0 ? itemAt(baseIndex - 1) : null) ?? getLast() ?? getFirst();
128
- if ((nextTab == null ? void 0 : nextTab.element) === overflowButtonRef.current) {
129
- const overflowIndex = getIndex(nextTab.id);
130
- nextTab = (overflowIndex > 0 ? itemAt(overflowIndex - 1) : null) ?? (baseIndex > 0 ? itemAt(baseIndex - 1) : null) ?? getFirst();
131
- }
132
- if (!(nextTab == null ? void 0 : nextTab.element)) return;
133
- if (removedWasSelected && !menuOpen && !getVisibleSelectedTab(tabstripRef.current, removedId)) {
134
- activeTab.current = { id: nextTab.id, value: nextTab.value };
135
- setSelected(null, nextTab.value);
136
- }
137
- focusElementWithRetry(() => {
138
- if (removedWasSelected) {
139
- return getSelectedTabElement() ?? (nextTab == null ? void 0 : nextTab.element);
140
- }
141
- return nextTab == null ? void 0 : nextTab.element;
142
- });
143
- };
144
- if (!(targetWindow == null ? void 0 : targetWindow.requestAnimationFrame)) {
145
- restoreFocus();
146
- return;
147
- }
148
- targetWindow.requestAnimationFrame(() => {
149
- targetWindow.requestAnimationFrame(() => {
150
- restoreFocus();
151
- });
152
- });
153
- });
154
- react.useEffect(() => {
155
- return () => {
156
- if (removalRecoveryRafRef.current != null && targetWindow) {
157
- targetWindow.cancelAnimationFrame(removalRecoveryRafRef.current);
158
- }
159
- };
160
- }, [removalRecoveryRafRef, targetWindow]);
161
- return handleTabRemoval;
162
- }
163
-
164
- exports.useTabRemovalHandler = useTabRemovalHandler;
165
- //# sourceMappingURL=useTabRemovalHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTabRemovalHandler.js","sources":["../src/tabs-next/hooks/useTabRemovalHandler.ts"],"sourcesContent":["import {\n type MutableRefObject,\n type RefObject,\n useCallback,\n useEffect,\n} from \"react\";\nimport { useEventCallback } from \"../../utils/useEventCallback\";\nimport { isHTMLElement } from \"../domUtils\";\nimport type { Item, TabsNextContextValue } from \"../TabsNextContext\";\n\ninterface RemovedItem {\n id: string;\n value: string;\n staleIndex?: number;\n}\n\ninterface UseTabRemovalHandlerArgs {\n activeTab: MutableRefObject<Pick<Item, \"id\" | \"value\"> | undefined>;\n focusElementWithRetry: (\n getElement: () => HTMLElement | null | undefined,\n ) => void;\n getFirst: TabsNextContextValue[\"getFirst\"];\n getIndex: TabsNextContextValue[\"getIndex\"];\n getLast: TabsNextContextValue[\"getLast\"];\n getRemovedItems: () => Map<string, RemovedItem>;\n getRenderedTab: TabsNextContextValue[\"getRenderedTab\"];\n getSelectedTabElement: () => HTMLElement | null | undefined;\n item: TabsNextContextValue[\"item\"];\n itemAt: TabsNextContextValue[\"itemAt\"];\n maxRetryAttempts: number;\n menuOpen: boolean;\n overflowButtonRef: RefObject<HTMLButtonElement | null>;\n overflowListRef: RefObject<HTMLDivElement | null>;\n pendingRemovalRecoveryRef: MutableRefObject<boolean>;\n pendingRemovalRecoveryRetriesRef: MutableRefObject<number>;\n removalRecoveryRafRef: MutableRefObject<number | null>;\n selected?: string;\n setSelected: TabsNextContextValue[\"setSelected\"];\n tabstripRef: RefObject<HTMLDivElement | null>;\n targetWindow: Window | null | undefined;\n}\n\nfunction hasLostDocumentFocus(doc: Document) {\n const activeElement = doc.activeElement;\n return (\n !activeElement ||\n activeElement === doc.body ||\n activeElement === doc.documentElement ||\n !activeElement.isConnected\n );\n}\n\nfunction getVisibleSelectedTab(\n tabstrip: HTMLDivElement | null,\n excludedId?: string,\n) {\n if (!tabstrip) {\n return null;\n }\n\n const tabs = tabstrip.querySelectorAll<HTMLElement>(\n ':scope > [data-tabslot] [role=\"tab\"][aria-selected=\"true\"]',\n );\n\n return (\n Array.from(tabs).find((tab) => {\n if (excludedId && tab.id === excludedId) {\n return false;\n }\n\n return tab.isConnected;\n }) ?? null\n );\n}\n\nexport function useTabRemovalHandler({\n activeTab,\n focusElementWithRetry,\n getFirst,\n getIndex,\n getLast,\n getRemovedItems,\n getRenderedTab,\n getSelectedTabElement,\n item,\n itemAt,\n maxRetryAttempts,\n menuOpen,\n overflowButtonRef,\n overflowListRef,\n pendingRemovalRecoveryRef,\n pendingRemovalRecoveryRetriesRef,\n removalRecoveryRafRef,\n selected,\n setSelected,\n tabstripRef,\n targetWindow,\n}: UseTabRemovalHandlerArgs) {\n const clearPendingRemovalRecovery = useCallback(() => {\n pendingRemovalRecoveryRef.current = false;\n pendingRemovalRecoveryRetriesRef.current = 0;\n }, [pendingRemovalRecoveryRef, pendingRemovalRecoveryRetriesRef]);\n\n const handleTabRemoval = useEventCallback(() => {\n const doc = targetWindow?.document;\n if (!doc) return;\n\n const activeTabWasSelected = activeTab.current?.value === selected;\n\n const shouldRecoverFocus = () => {\n if (hasLostDocumentFocus(doc)) return true;\n\n const activeElement = doc.activeElement;\n if (!isHTMLElement(activeElement)) return false;\n\n if (!menuOpen) {\n if (activeElement === overflowButtonRef.current) {\n return activeTabWasSelected;\n }\n\n return (\n tabstripRef.current?.contains(activeElement) &&\n activeElement.getAttribute(\"role\") !== \"tab\"\n );\n }\n\n if (activeElement === overflowButtonRef.current) {\n return true;\n }\n\n if (overflowListRef.current?.contains(activeElement)) {\n // When closing tabs from the overflow menu, focus can remain within\n // the floating UI rather than falling back to body.\n return activeElement.getAttribute(\"role\") !== \"tab\";\n }\n\n return false;\n };\n\n // If focus was lost due to deletion, browsers may report body/html or a\n // disconnected active element depending on browser behavior.\n if (!shouldRecoverFocus()) {\n if (\n pendingRemovalRecoveryRef.current &&\n removalRecoveryRafRef.current == null\n ) {\n if (pendingRemovalRecoveryRetriesRef.current < maxRetryAttempts) {\n pendingRemovalRecoveryRetriesRef.current += 1;\n if (!targetWindow?.requestAnimationFrame) {\n handleTabRemoval();\n return;\n }\n\n removalRecoveryRafRef.current = targetWindow.requestAnimationFrame(\n () => {\n removalRecoveryRafRef.current = null;\n handleTabRemoval();\n },\n );\n } else {\n clearPendingRemovalRecovery();\n }\n }\n return;\n }\n\n if (!activeTab.current) {\n clearPendingRemovalRecovery();\n return;\n }\n\n const removedItems = getRemovedItems();\n const removed = removedItems.get(activeTab.current.id);\n if (!removed) {\n clearPendingRemovalRecovery();\n return;\n }\n\n clearPendingRemovalRecovery();\n const removedWasSelected = removed.value === selected;\n const baseIndex = removed.staleIndex ?? -1;\n const removedId = removed.id;\n\n const restoreFocus = () => {\n const restoredTab = item(removedId);\n const restoredRenderedTab = getRenderedTab(removed.value);\n const focusMovedToOverflowButton =\n doc.activeElement === overflowButtonRef.current;\n\n // Overflow menu updates can temporarily remount tabs. If the tab is\n // back and focus was lost to a disconnected node, restore focus to the\n // remounted tab rather than treating it as a real deletion.\n if (\n restoredTab?.element?.isConnected &&\n restoredRenderedTab?.trigger === restoredTab.element &&\n !(removedWasSelected && focusMovedToOverflowButton)\n ) {\n if (shouldRecoverFocus()) {\n focusElementWithRetry(() => item(removedId)?.element);\n }\n return;\n }\n\n if (!shouldRecoverFocus()) {\n return;\n }\n\n let nextTab =\n (baseIndex >= 0 ? itemAt(baseIndex) : null) ??\n (baseIndex > 0 ? itemAt(baseIndex - 1) : null) ??\n getLast() ??\n getFirst();\n\n if (nextTab?.element === overflowButtonRef.current) {\n const overflowIndex = getIndex(nextTab.id);\n nextTab =\n (overflowIndex > 0 ? itemAt(overflowIndex - 1) : null) ??\n (baseIndex > 0 ? itemAt(baseIndex - 1) : null) ??\n getFirst();\n }\n\n if (!nextTab?.element) return;\n\n if (\n removedWasSelected &&\n !menuOpen &&\n !getVisibleSelectedTab(tabstripRef.current, removedId)\n ) {\n activeTab.current = { id: nextTab.id, value: nextTab.value };\n setSelected(null, nextTab.value);\n }\n\n focusElementWithRetry(() => {\n if (removedWasSelected) {\n return getSelectedTabElement() ?? nextTab?.element;\n }\n\n return nextTab?.element;\n });\n };\n\n if (!targetWindow?.requestAnimationFrame) {\n restoreFocus();\n return;\n }\n\n targetWindow.requestAnimationFrame(() => {\n targetWindow.requestAnimationFrame(() => {\n restoreFocus();\n });\n });\n });\n\n useEffect(() => {\n return () => {\n if (removalRecoveryRafRef.current != null && targetWindow) {\n targetWindow.cancelAnimationFrame(removalRecoveryRafRef.current);\n }\n };\n }, [removalRecoveryRafRef, targetWindow]);\n\n return handleTabRemoval;\n}\n"],"names":["useCallback","useEventCallback","_a","isHTMLElement","useEffect"],"mappings":"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"}