@workday/canvas-kit-react 6.0.0-alpha.0-next.31 → 6.0.0-alpha.0-next.33

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/common/index.ts +1 -0
  2. package/common/lib/EllipsisText.tsx +11 -0
  3. package/common/lib/utils/components.ts +50 -23
  4. package/common/lib/utils/index.ts +1 -0
  5. package/common/lib/utils/mergeProps.ts +4 -0
  6. package/common/lib/utils/useConstant.ts +18 -0
  7. package/common/lib/utils/useResizeObserver.ts +29 -0
  8. package/common/lib/utils/useUniqueId.ts +4 -3
  9. package/dist/commonjs/button/lib/parts/ButtonLabel.d.ts +1 -1
  10. package/dist/commonjs/button/lib/parts/ButtonLabel.d.ts.map +1 -1
  11. package/dist/commonjs/common/index.d.ts +1 -0
  12. package/dist/commonjs/common/index.d.ts.map +1 -1
  13. package/dist/commonjs/common/index.js +1 -0
  14. package/dist/commonjs/common/lib/EllipsisText.d.ts +5 -0
  15. package/dist/commonjs/common/lib/EllipsisText.d.ts.map +1 -0
  16. package/dist/commonjs/common/lib/EllipsisText.js +13 -0
  17. package/dist/commonjs/common/lib/utils/components.d.ts +19 -9
  18. package/dist/commonjs/common/lib/utils/components.d.ts.map +1 -1
  19. package/dist/commonjs/common/lib/utils/components.js +12 -2
  20. package/dist/commonjs/common/lib/utils/index.d.ts +1 -0
  21. package/dist/commonjs/common/lib/utils/index.d.ts.map +1 -1
  22. package/dist/commonjs/common/lib/utils/index.js +1 -0
  23. package/dist/commonjs/common/lib/utils/mergeProps.d.ts.map +1 -1
  24. package/dist/commonjs/common/lib/utils/mergeProps.js +5 -0
  25. package/dist/commonjs/common/lib/utils/useConstant.d.ts +9 -0
  26. package/dist/commonjs/common/lib/utils/useConstant.d.ts.map +1 -0
  27. package/dist/commonjs/common/lib/utils/useConstant.js +18 -0
  28. package/dist/commonjs/common/lib/utils/useResizeObserver.d.ts +3 -0
  29. package/dist/commonjs/common/lib/utils/useResizeObserver.d.ts.map +1 -0
  30. package/dist/commonjs/common/lib/utils/useResizeObserver.js +42 -0
  31. package/dist/commonjs/common/lib/utils/useUniqueId.d.ts.map +1 -1
  32. package/dist/commonjs/common/lib/utils/useUniqueId.js +3 -10
  33. package/dist/commonjs/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  34. package/dist/commonjs/dialog/lib/hooks/useDialogCard.d.ts.map +1 -1
  35. package/dist/commonjs/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  36. package/dist/commonjs/dialog/lib/hooks/useDialogPopper.d.ts.map +1 -1
  37. package/dist/commonjs/modal/lib/ModalOverlay.d.ts +4 -2
  38. package/dist/commonjs/modal/lib/ModalOverlay.d.ts.map +1 -1
  39. package/dist/commonjs/modal/lib/hooks/useModalCard.d.ts +4 -16
  40. package/dist/commonjs/modal/lib/hooks/useModalCard.d.ts.map +1 -1
  41. package/dist/commonjs/modal/lib/hooks/useModalHeading.d.ts +5 -17
  42. package/dist/commonjs/modal/lib/hooks/useModalHeading.d.ts.map +1 -1
  43. package/dist/commonjs/pagination/lib/Pagination/GoTo/Label.d.ts +3 -0
  44. package/dist/commonjs/pagination/lib/Pagination/GoTo/Label.d.ts.map +1 -1
  45. package/dist/commonjs/pagination/lib/Pagination/PageList.d.ts +1 -1
  46. package/dist/commonjs/pagination/lib/Pagination/PageList.d.ts.map +1 -1
  47. package/dist/commonjs/pagination/lib/Pagination/Pagination.d.ts +5 -5
  48. package/dist/commonjs/pagination/lib/Pagination/common/List.d.ts +1 -1
  49. package/dist/commonjs/pagination/lib/Pagination/common/List.d.ts.map +1 -1
  50. package/dist/commonjs/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  51. package/dist/commonjs/pagination/lib/Pagination/common/utils/getValidChildren.d.ts.map +1 -1
  52. package/dist/commonjs/pagination/lib/Pagination/types.d.ts +39 -0
  53. package/dist/commonjs/pagination/lib/Pagination/types.d.ts.map +1 -1
  54. package/dist/commonjs/pagination/lib/Pagination/usePaginationModel.d.ts +19 -0
  55. package/dist/commonjs/pagination/lib/Pagination/usePaginationModel.d.ts.map +1 -1
  56. package/dist/commonjs/popup/lib/PopupCard.d.ts.map +1 -1
  57. package/dist/commonjs/popup/lib/PopupCard.js +2 -3
  58. package/dist/commonjs/popup/lib/hooks/usePopupCard.d.ts +5 -2
  59. package/dist/commonjs/popup/lib/hooks/usePopupCard.d.ts.map +1 -1
  60. package/dist/commonjs/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  61. package/dist/commonjs/popup/lib/hooks/usePopupCloseButton.d.ts.map +1 -1
  62. package/dist/commonjs/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  63. package/dist/commonjs/popup/lib/hooks/usePopupHeading.d.ts.map +1 -1
  64. package/dist/commonjs/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  65. package/dist/commonjs/popup/lib/hooks/usePopupPopper.d.ts.map +1 -1
  66. package/dist/commonjs/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  67. package/dist/commonjs/popup/lib/hooks/usePopupTarget.d.ts.map +1 -1
  68. package/dist/commonjs/tabs/index.d.ts +5 -0
  69. package/dist/commonjs/tabs/index.d.ts.map +1 -1
  70. package/dist/commonjs/tabs/index.js +11 -0
  71. package/dist/commonjs/tabs/lib/Tabs.d.ts +35 -7
  72. package/dist/commonjs/tabs/lib/Tabs.d.ts.map +1 -1
  73. package/dist/commonjs/tabs/lib/Tabs.js +28 -7
  74. package/dist/commonjs/tabs/lib/TabsItem.d.ts +107 -0
  75. package/dist/commonjs/tabs/lib/TabsItem.d.ts.map +1 -0
  76. package/dist/commonjs/tabs/lib/TabsItem.js +140 -0
  77. package/dist/commonjs/tabs/lib/TabsList.d.ts +43 -0
  78. package/dist/commonjs/tabs/lib/TabsList.d.ts.map +1 -0
  79. package/dist/commonjs/tabs/lib/TabsList.js +53 -0
  80. package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts +21 -0
  81. package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts.map +1 -0
  82. package/dist/commonjs/tabs/lib/{TabList.js → TabsMenuPopper.js} +7 -19
  83. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +31 -0
  84. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts.map +1 -0
  85. package/dist/commonjs/tabs/lib/TabsOverflowButton.js +57 -0
  86. package/{ts3.5/dist/commonjs/tabs/lib/TabPanel.d.ts → dist/commonjs/tabs/lib/TabsPanel.d.ts} +39 -29
  87. package/dist/commonjs/tabs/lib/TabsPanel.d.ts.map +1 -0
  88. package/dist/commonjs/tabs/lib/TabsPanel.js +64 -0
  89. package/dist/{es6/tabs/lib/TabList.d.ts → commonjs/tabs/lib/TabsPanels.d.ts} +5 -5
  90. package/dist/commonjs/tabs/lib/TabsPanels.d.ts.map +1 -0
  91. package/dist/commonjs/tabs/lib/TabsPanels.js +21 -0
  92. package/dist/commonjs/tabs/lib/cursor/index.d.ts +1 -1
  93. package/dist/commonjs/tabs/lib/cursor/index.d.ts.map +1 -1
  94. package/dist/commonjs/tabs/lib/cursor/index.js +1 -1
  95. package/dist/commonjs/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  96. package/dist/commonjs/tabs/lib/cursor/useCursorModel.d.ts.map +1 -1
  97. package/dist/commonjs/tabs/lib/cursor/useCursorModel.js +50 -49
  98. package/dist/commonjs/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  99. package/dist/commonjs/tabs/lib/cursor/useRovingFocus.d.ts.map +1 -0
  100. package/dist/commonjs/tabs/lib/cursor/{hooks.js → useRovingFocus.js} +26 -50
  101. package/dist/commonjs/tabs/lib/list/index.d.ts +2 -1
  102. package/dist/commonjs/tabs/lib/list/index.d.ts.map +1 -1
  103. package/dist/commonjs/tabs/lib/list/index.js +2 -1
  104. package/dist/commonjs/tabs/lib/list/renderItem.d.ts +4 -0
  105. package/dist/commonjs/tabs/lib/list/renderItem.d.ts.map +1 -0
  106. package/dist/commonjs/tabs/lib/list/renderItem.js +18 -0
  107. package/dist/commonjs/tabs/lib/list/useListModel.d.ts +25 -13
  108. package/dist/commonjs/tabs/lib/list/useListModel.d.ts.map +1 -1
  109. package/dist/commonjs/tabs/lib/list/useListModel.js +20 -7
  110. package/dist/commonjs/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  111. package/dist/commonjs/tabs/lib/list/useListRegisterItem.d.ts.map +1 -0
  112. package/dist/commonjs/tabs/lib/list/useListRegisterItem.js +46 -0
  113. package/dist/commonjs/tabs/lib/menu/Menu.d.ts +80 -0
  114. package/dist/commonjs/tabs/lib/menu/Menu.d.ts.map +1 -0
  115. package/dist/commonjs/tabs/lib/menu/Menu.js +94 -0
  116. package/dist/commonjs/tabs/lib/menu/MenuCard.d.ts +17 -0
  117. package/dist/commonjs/tabs/lib/menu/MenuCard.d.ts.map +1 -0
  118. package/dist/commonjs/tabs/lib/menu/MenuCard.js +82 -0
  119. package/dist/commonjs/tabs/lib/menu/MenuItem.d.ts +62 -0
  120. package/dist/commonjs/tabs/lib/menu/MenuItem.d.ts.map +1 -0
  121. package/dist/commonjs/tabs/lib/menu/MenuItem.js +145 -0
  122. package/dist/commonjs/tabs/lib/menu/MenuList.d.ts +23 -0
  123. package/dist/commonjs/tabs/lib/menu/MenuList.d.ts.map +1 -0
  124. package/dist/commonjs/tabs/lib/menu/MenuList.js +52 -0
  125. package/dist/commonjs/tabs/lib/menu/MenuPopper.d.ts +21 -0
  126. package/dist/commonjs/tabs/lib/menu/MenuPopper.d.ts.map +1 -0
  127. package/dist/commonjs/tabs/lib/menu/MenuPopper.js +45 -0
  128. package/dist/commonjs/tabs/lib/menu/MenuTarget.d.ts +21 -0
  129. package/dist/commonjs/tabs/lib/menu/MenuTarget.d.ts.map +1 -0
  130. package/dist/commonjs/tabs/lib/menu/MenuTarget.js +60 -0
  131. package/dist/commonjs/tabs/lib/menu/index.d.ts +8 -0
  132. package/dist/commonjs/tabs/lib/menu/index.d.ts.map +1 -0
  133. package/dist/commonjs/tabs/lib/menu/index.js +18 -0
  134. package/dist/commonjs/tabs/lib/menu/useMenuModel.d.ts +35 -0
  135. package/dist/commonjs/tabs/lib/menu/useMenuModel.d.ts.map +1 -0
  136. package/dist/commonjs/tabs/lib/menu/useMenuModel.js +33 -0
  137. package/dist/commonjs/tabs/lib/overflow/index.d.ts +5 -0
  138. package/dist/commonjs/tabs/lib/overflow/index.d.ts.map +1 -0
  139. package/dist/commonjs/tabs/lib/overflow/index.js +9 -0
  140. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  141. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.d.ts.map +1 -0
  142. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.js +22 -0
  143. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  144. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.d.ts.map +1 -0
  145. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.js +32 -0
  146. package/dist/commonjs/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  147. package/dist/commonjs/tabs/lib/overflow/useOverflowModel.d.ts.map +1 -0
  148. package/dist/commonjs/tabs/lib/overflow/useOverflowModel.js +117 -0
  149. package/dist/commonjs/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  150. package/dist/commonjs/tabs/lib/overflow/useOverflowTarget.d.ts.map +1 -0
  151. package/dist/commonjs/tabs/lib/overflow/useOverflowTarget.js +35 -0
  152. package/dist/commonjs/tabs/lib/selection/index.d.ts +4 -0
  153. package/dist/commonjs/tabs/lib/selection/index.d.ts.map +1 -0
  154. package/dist/commonjs/tabs/lib/selection/index.js +8 -0
  155. package/dist/commonjs/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  156. package/dist/commonjs/tabs/lib/selection/useResetCursorOnBlur.d.ts.map +1 -0
  157. package/dist/commonjs/tabs/lib/{hooks.js → selection/useResetCursorOnBlur.js} +8 -9
  158. package/dist/commonjs/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  159. package/dist/commonjs/tabs/lib/selection/useSelectionItem.d.ts.map +1 -0
  160. package/dist/commonjs/tabs/lib/selection/useSelectionItem.js +16 -0
  161. package/dist/commonjs/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  162. package/dist/commonjs/tabs/lib/selection/useSelectionModel.d.ts.map +1 -0
  163. package/dist/commonjs/tabs/lib/selection/useSelectionModel.js +80 -0
  164. package/dist/commonjs/tabs/lib/useTabsModel.d.ts +39 -38
  165. package/dist/commonjs/tabs/lib/useTabsModel.d.ts.map +1 -1
  166. package/dist/commonjs/tabs/lib/useTabsModel.js +50 -37
  167. package/dist/commonjs/tooltip/lib/OverflowTooltip.d.ts +10 -0
  168. package/dist/commonjs/tooltip/lib/OverflowTooltip.d.ts.map +1 -1
  169. package/dist/commonjs/tooltip/lib/OverflowTooltip.js +8 -6
  170. package/dist/commonjs/tooltip/lib/useTooltip.d.ts +1 -1
  171. package/dist/es6/button/lib/parts/ButtonLabel.d.ts +1 -1
  172. package/dist/es6/button/lib/parts/ButtonLabel.d.ts.map +1 -1
  173. package/dist/es6/common/index.d.ts +1 -0
  174. package/dist/es6/common/index.d.ts.map +1 -1
  175. package/dist/es6/common/index.js +1 -0
  176. package/dist/es6/common/lib/EllipsisText.d.ts +5 -0
  177. package/dist/es6/common/lib/EllipsisText.d.ts.map +1 -0
  178. package/dist/es6/common/lib/EllipsisText.js +8 -0
  179. package/dist/es6/common/lib/utils/components.d.ts +19 -9
  180. package/dist/es6/common/lib/utils/components.d.ts.map +1 -1
  181. package/dist/es6/common/lib/utils/components.js +12 -2
  182. package/dist/es6/common/lib/utils/index.d.ts +1 -0
  183. package/dist/es6/common/lib/utils/index.d.ts.map +1 -1
  184. package/dist/es6/common/lib/utils/index.js +1 -0
  185. package/dist/es6/common/lib/utils/mergeProps.d.ts.map +1 -1
  186. package/dist/es6/common/lib/utils/mergeProps.js +5 -0
  187. package/dist/es6/common/lib/utils/useConstant.d.ts +9 -0
  188. package/dist/es6/common/lib/utils/useConstant.d.ts.map +1 -0
  189. package/dist/es6/common/lib/utils/useConstant.js +15 -0
  190. package/dist/es6/common/lib/utils/useResizeObserver.d.ts +3 -0
  191. package/dist/es6/common/lib/utils/useResizeObserver.d.ts.map +1 -0
  192. package/dist/es6/common/lib/utils/useResizeObserver.js +37 -0
  193. package/dist/es6/common/lib/utils/useUniqueId.d.ts.map +1 -1
  194. package/dist/es6/common/lib/utils/useUniqueId.js +3 -3
  195. package/dist/es6/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  196. package/dist/es6/dialog/lib/hooks/useDialogCard.d.ts.map +1 -1
  197. package/dist/es6/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  198. package/dist/es6/dialog/lib/hooks/useDialogPopper.d.ts.map +1 -1
  199. package/dist/es6/modal/lib/ModalOverlay.d.ts +4 -2
  200. package/dist/es6/modal/lib/ModalOverlay.d.ts.map +1 -1
  201. package/dist/es6/modal/lib/hooks/useModalCard.d.ts +4 -16
  202. package/dist/es6/modal/lib/hooks/useModalCard.d.ts.map +1 -1
  203. package/dist/es6/modal/lib/hooks/useModalHeading.d.ts +5 -17
  204. package/dist/es6/modal/lib/hooks/useModalHeading.d.ts.map +1 -1
  205. package/dist/es6/pagination/lib/Pagination/GoTo/Label.d.ts +3 -0
  206. package/dist/es6/pagination/lib/Pagination/GoTo/Label.d.ts.map +1 -1
  207. package/dist/es6/pagination/lib/Pagination/PageList.d.ts +1 -1
  208. package/dist/es6/pagination/lib/Pagination/PageList.d.ts.map +1 -1
  209. package/dist/es6/pagination/lib/Pagination/Pagination.d.ts +5 -5
  210. package/dist/es6/pagination/lib/Pagination/common/List.d.ts +1 -1
  211. package/dist/es6/pagination/lib/Pagination/common/List.d.ts.map +1 -1
  212. package/dist/es6/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  213. package/dist/es6/pagination/lib/Pagination/common/utils/getValidChildren.d.ts.map +1 -1
  214. package/dist/es6/pagination/lib/Pagination/types.d.ts +39 -0
  215. package/dist/es6/pagination/lib/Pagination/types.d.ts.map +1 -1
  216. package/dist/es6/pagination/lib/Pagination/usePaginationModel.d.ts +19 -0
  217. package/dist/es6/pagination/lib/Pagination/usePaginationModel.d.ts.map +1 -1
  218. package/dist/es6/popup/lib/PopupCard.d.ts.map +1 -1
  219. package/dist/es6/popup/lib/PopupCard.js +3 -4
  220. package/dist/es6/popup/lib/hooks/usePopupCard.d.ts +5 -2
  221. package/dist/es6/popup/lib/hooks/usePopupCard.d.ts.map +1 -1
  222. package/dist/es6/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  223. package/dist/es6/popup/lib/hooks/usePopupCloseButton.d.ts.map +1 -1
  224. package/dist/es6/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  225. package/dist/es6/popup/lib/hooks/usePopupHeading.d.ts.map +1 -1
  226. package/dist/es6/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  227. package/dist/es6/popup/lib/hooks/usePopupPopper.d.ts.map +1 -1
  228. package/dist/es6/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  229. package/dist/es6/popup/lib/hooks/usePopupTarget.d.ts.map +1 -1
  230. package/dist/es6/tabs/index.d.ts +5 -0
  231. package/dist/es6/tabs/index.d.ts.map +1 -1
  232. package/dist/es6/tabs/index.js +5 -0
  233. package/dist/es6/tabs/lib/Tabs.d.ts +35 -7
  234. package/dist/es6/tabs/lib/Tabs.d.ts.map +1 -1
  235. package/dist/es6/tabs/lib/Tabs.js +28 -7
  236. package/dist/es6/tabs/lib/TabsItem.d.ts +107 -0
  237. package/dist/es6/tabs/lib/TabsItem.d.ts.map +1 -0
  238. package/dist/es6/tabs/lib/TabsItem.js +131 -0
  239. package/dist/es6/tabs/lib/TabsList.d.ts +43 -0
  240. package/dist/es6/tabs/lib/TabsList.d.ts.map +1 -0
  241. package/dist/es6/tabs/lib/TabsList.js +44 -0
  242. package/dist/es6/tabs/lib/TabsMenuPopper.d.ts +21 -0
  243. package/dist/es6/tabs/lib/TabsMenuPopper.d.ts.map +1 -0
  244. package/dist/es6/tabs/lib/{TabList.js → TabsMenuPopper.js} +8 -20
  245. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts +31 -0
  246. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts.map +1 -0
  247. package/dist/es6/tabs/lib/TabsOverflowButton.js +48 -0
  248. package/dist/{commonjs/tabs/lib/TabPanel.d.ts → es6/tabs/lib/TabsPanel.d.ts} +15 -5
  249. package/dist/es6/tabs/lib/TabsPanel.d.ts.map +1 -0
  250. package/dist/es6/tabs/lib/TabsPanel.js +59 -0
  251. package/{ts3.5/dist/commonjs/tabs/lib/TabList.d.ts → dist/es6/tabs/lib/TabsPanels.d.ts} +15 -15
  252. package/dist/es6/tabs/lib/TabsPanels.d.ts.map +1 -0
  253. package/dist/es6/tabs/lib/TabsPanels.js +12 -0
  254. package/dist/es6/tabs/lib/cursor/index.d.ts +1 -1
  255. package/dist/es6/tabs/lib/cursor/index.d.ts.map +1 -1
  256. package/dist/es6/tabs/lib/cursor/index.js +1 -1
  257. package/dist/es6/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  258. package/dist/es6/tabs/lib/cursor/useCursorModel.d.ts.map +1 -1
  259. package/dist/es6/tabs/lib/cursor/useCursorModel.js +51 -50
  260. package/dist/es6/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  261. package/dist/es6/tabs/lib/cursor/useRovingFocus.d.ts.map +1 -0
  262. package/dist/es6/tabs/lib/cursor/useRovingFocus.js +84 -0
  263. package/dist/es6/tabs/lib/list/index.d.ts +2 -1
  264. package/dist/es6/tabs/lib/list/index.d.ts.map +1 -1
  265. package/dist/es6/tabs/lib/list/index.js +2 -1
  266. package/dist/es6/tabs/lib/list/renderItem.d.ts +4 -0
  267. package/dist/es6/tabs/lib/list/renderItem.d.ts.map +1 -0
  268. package/dist/es6/tabs/lib/list/renderItem.js +12 -0
  269. package/dist/es6/tabs/lib/list/useListModel.d.ts +25 -13
  270. package/dist/es6/tabs/lib/list/useListModel.d.ts.map +1 -1
  271. package/dist/es6/tabs/lib/list/useListModel.js +21 -8
  272. package/dist/es6/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  273. package/dist/es6/tabs/lib/list/useListRegisterItem.d.ts.map +1 -0
  274. package/dist/es6/tabs/lib/list/useListRegisterItem.js +41 -0
  275. package/dist/es6/tabs/lib/menu/Menu.d.ts +80 -0
  276. package/dist/es6/tabs/lib/menu/Menu.d.ts.map +1 -0
  277. package/dist/es6/tabs/lib/menu/Menu.js +89 -0
  278. package/dist/es6/tabs/lib/menu/MenuCard.d.ts +17 -0
  279. package/dist/es6/tabs/lib/menu/MenuCard.d.ts.map +1 -0
  280. package/dist/es6/tabs/lib/menu/MenuCard.js +73 -0
  281. package/dist/es6/tabs/lib/menu/MenuItem.d.ts +62 -0
  282. package/dist/es6/tabs/lib/menu/MenuItem.d.ts.map +1 -0
  283. package/dist/es6/tabs/lib/menu/MenuItem.js +136 -0
  284. package/dist/es6/tabs/lib/menu/MenuList.d.ts +23 -0
  285. package/dist/es6/tabs/lib/menu/MenuList.d.ts.map +1 -0
  286. package/dist/es6/tabs/lib/menu/MenuList.js +43 -0
  287. package/dist/es6/tabs/lib/menu/MenuPopper.d.ts +21 -0
  288. package/dist/es6/tabs/lib/menu/MenuPopper.d.ts.map +1 -0
  289. package/dist/es6/tabs/lib/menu/MenuPopper.js +36 -0
  290. package/dist/es6/tabs/lib/menu/MenuTarget.d.ts +21 -0
  291. package/dist/es6/tabs/lib/menu/MenuTarget.d.ts.map +1 -0
  292. package/dist/es6/tabs/lib/menu/MenuTarget.js +51 -0
  293. package/dist/es6/tabs/lib/menu/index.d.ts +8 -0
  294. package/dist/es6/tabs/lib/menu/index.d.ts.map +1 -0
  295. package/dist/es6/tabs/lib/menu/index.js +7 -0
  296. package/dist/es6/tabs/lib/menu/useMenuModel.d.ts +35 -0
  297. package/dist/es6/tabs/lib/menu/useMenuModel.d.ts.map +1 -0
  298. package/dist/es6/tabs/lib/menu/useMenuModel.js +31 -0
  299. package/dist/es6/tabs/lib/overflow/index.d.ts +5 -0
  300. package/dist/es6/tabs/lib/overflow/index.d.ts.map +1 -0
  301. package/dist/es6/tabs/lib/overflow/index.js +4 -0
  302. package/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  303. package/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.d.ts.map +1 -0
  304. package/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.js +13 -0
  305. package/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  306. package/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.d.ts.map +1 -0
  307. package/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.js +30 -0
  308. package/dist/es6/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  309. package/dist/es6/tabs/lib/overflow/useOverflowModel.d.ts.map +1 -0
  310. package/dist/es6/tabs/lib/overflow/useOverflowModel.js +111 -0
  311. package/dist/es6/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  312. package/dist/es6/tabs/lib/overflow/useOverflowTarget.d.ts.map +1 -0
  313. package/dist/es6/tabs/lib/overflow/useOverflowTarget.js +30 -0
  314. package/dist/es6/tabs/lib/selection/index.d.ts +4 -0
  315. package/dist/es6/tabs/lib/selection/index.d.ts.map +1 -0
  316. package/dist/es6/tabs/lib/selection/index.js +3 -0
  317. package/dist/es6/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  318. package/dist/es6/tabs/lib/selection/useResetCursorOnBlur.d.ts.map +1 -0
  319. package/dist/es6/tabs/lib/{hooks.js → selection/useResetCursorOnBlur.js} +8 -9
  320. package/dist/es6/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  321. package/dist/es6/tabs/lib/selection/useSelectionItem.d.ts.map +1 -0
  322. package/dist/es6/tabs/lib/selection/useSelectionItem.js +14 -0
  323. package/dist/es6/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  324. package/dist/es6/tabs/lib/selection/useSelectionModel.d.ts.map +1 -0
  325. package/dist/es6/tabs/lib/selection/useSelectionModel.js +75 -0
  326. package/dist/es6/tabs/lib/useTabsModel.d.ts +39 -38
  327. package/dist/es6/tabs/lib/useTabsModel.d.ts.map +1 -1
  328. package/dist/es6/tabs/lib/useTabsModel.js +50 -37
  329. package/dist/es6/tooltip/lib/OverflowTooltip.d.ts +10 -0
  330. package/dist/es6/tooltip/lib/OverflowTooltip.d.ts.map +1 -1
  331. package/dist/es6/tooltip/lib/OverflowTooltip.js +5 -3
  332. package/dist/es6/tooltip/lib/useTooltip.d.ts +1 -1
  333. package/package.json +7 -5
  334. package/pagination/lib/Pagination/GoTo/Label.tsx +3 -0
  335. package/pagination/lib/Pagination/types.ts +44 -5
  336. package/pagination/lib/Pagination/usePaginationModel.ts +19 -0
  337. package/popup/lib/PopupCard.tsx +3 -2
  338. package/tabs/index.ts +6 -0
  339. package/tabs/lib/Tabs.tsx +34 -9
  340. package/tabs/lib/TabsItem.tsx +250 -0
  341. package/tabs/lib/TabsList.tsx +67 -0
  342. package/tabs/lib/TabsMenuPopper.tsx +27 -0
  343. package/tabs/lib/TabsOverflowButton.tsx +58 -0
  344. package/tabs/lib/{TabPanel.tsx → TabsPanel.tsx} +33 -31
  345. package/tabs/lib/TabsPanels.tsx +28 -0
  346. package/tabs/lib/cursor/index.ts +1 -1
  347. package/tabs/lib/cursor/useCursorModel.tsx +78 -65
  348. package/tabs/lib/cursor/useRovingFocus.tsx +94 -0
  349. package/tabs/lib/list/index.ts +2 -1
  350. package/tabs/lib/list/renderItem.tsx +19 -0
  351. package/tabs/lib/list/useListModel.tsx +48 -23
  352. package/tabs/lib/list/useListRegisterItem.tsx +53 -0
  353. package/tabs/lib/menu/Menu.tsx +95 -0
  354. package/tabs/lib/menu/MenuCard.tsx +96 -0
  355. package/tabs/lib/menu/MenuItem.tsx +195 -0
  356. package/tabs/lib/menu/MenuList.tsx +59 -0
  357. package/tabs/lib/menu/MenuPopper.tsx +31 -0
  358. package/tabs/lib/menu/MenuTarget.tsx +52 -0
  359. package/tabs/lib/menu/index.ts +8 -0
  360. package/tabs/lib/menu/useMenuModel.tsx +67 -0
  361. package/tabs/lib/overflow/index.ts +4 -0
  362. package/tabs/lib/overflow/spec/tsconfig.json +3 -0
  363. package/tabs/lib/overflow/spec/useOverflowModel.spec.tsx +46 -0
  364. package/tabs/lib/overflow/useOverflowMeasureContainer.ts +20 -0
  365. package/tabs/lib/overflow/useOverflowMeasureItem.tsx +40 -0
  366. package/tabs/lib/overflow/useOverflowModel.tsx +185 -0
  367. package/tabs/lib/overflow/useOverflowTarget.tsx +42 -0
  368. package/tabs/lib/selection/index.ts +3 -0
  369. package/tabs/lib/selection/useResetCursorOnBlur.tsx +29 -0
  370. package/tabs/lib/selection/useSelectionItem.tsx +26 -0
  371. package/tabs/lib/selection/useSelectionModel.tsx +133 -0
  372. package/tabs/lib/useTabsModel.tsx +93 -78
  373. package/tooltip/lib/OverflowTooltip.tsx +5 -3
  374. package/ts3.5/dist/commonjs/button/lib/parts/ButtonLabel.d.ts +1 -1
  375. package/ts3.5/dist/commonjs/common/index.d.ts +1 -0
  376. package/ts3.5/dist/commonjs/common/lib/EllipsisText.d.ts +5 -0
  377. package/ts3.5/dist/commonjs/common/lib/utils/components.d.ts +19 -9
  378. package/ts3.5/dist/commonjs/common/lib/utils/index.d.ts +1 -0
  379. package/ts3.5/dist/commonjs/common/lib/utils/useConstant.d.ts +9 -0
  380. package/ts3.5/dist/commonjs/common/lib/utils/useResizeObserver.d.ts +3 -0
  381. package/ts3.5/dist/commonjs/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  382. package/ts3.5/dist/commonjs/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  383. package/ts3.5/dist/commonjs/modal/lib/ModalOverlay.d.ts +4 -2
  384. package/ts3.5/dist/commonjs/modal/lib/hooks/useModalCard.d.ts +4 -16
  385. package/ts3.5/dist/commonjs/modal/lib/hooks/useModalHeading.d.ts +5 -17
  386. package/ts3.5/dist/commonjs/pagination/lib/Pagination/GoTo/Label.d.ts +3 -0
  387. package/ts3.5/dist/commonjs/pagination/lib/Pagination/PageList.d.ts +1 -1
  388. package/ts3.5/dist/commonjs/pagination/lib/Pagination/Pagination.d.ts +5 -5
  389. package/ts3.5/dist/commonjs/pagination/lib/Pagination/common/List.d.ts +1 -1
  390. package/ts3.5/dist/commonjs/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  391. package/ts3.5/dist/commonjs/pagination/lib/Pagination/types.d.ts +39 -0
  392. package/ts3.5/dist/commonjs/pagination/lib/Pagination/usePaginationModel.d.ts +19 -0
  393. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupCard.d.ts +5 -2
  394. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  395. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  396. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  397. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  398. package/ts3.5/dist/commonjs/tabs/index.d.ts +5 -0
  399. package/ts3.5/dist/commonjs/tabs/lib/Tabs.d.ts +35 -7
  400. package/ts3.5/dist/commonjs/tabs/lib/TabsItem.d.ts +107 -0
  401. package/ts3.5/dist/commonjs/tabs/lib/TabsList.d.ts +43 -0
  402. package/ts3.5/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts +21 -0
  403. package/ts3.5/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +31 -0
  404. package/{dist/es6/tabs/lib/TabPanel.d.ts → ts3.5/dist/commonjs/tabs/lib/TabsPanel.d.ts} +39 -29
  405. package/ts3.5/dist/{es6/tabs/lib/TabList.d.ts → commonjs/tabs/lib/TabsPanels.d.ts} +5 -5
  406. package/ts3.5/dist/commonjs/tabs/lib/cursor/index.d.ts +1 -1
  407. package/ts3.5/dist/commonjs/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  408. package/ts3.5/dist/commonjs/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  409. package/ts3.5/dist/commonjs/tabs/lib/list/index.d.ts +2 -1
  410. package/ts3.5/dist/commonjs/tabs/lib/list/renderItem.d.ts +4 -0
  411. package/ts3.5/dist/commonjs/tabs/lib/list/useListModel.d.ts +25 -13
  412. package/ts3.5/dist/commonjs/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  413. package/ts3.5/dist/commonjs/tabs/lib/menu/Menu.d.ts +80 -0
  414. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuCard.d.ts +17 -0
  415. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuItem.d.ts +62 -0
  416. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuList.d.ts +23 -0
  417. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuPopper.d.ts +21 -0
  418. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuTarget.d.ts +21 -0
  419. package/ts3.5/dist/commonjs/tabs/lib/menu/index.d.ts +8 -0
  420. package/ts3.5/dist/commonjs/tabs/lib/menu/useMenuModel.d.ts +35 -0
  421. package/ts3.5/dist/commonjs/tabs/lib/overflow/index.d.ts +5 -0
  422. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  423. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  424. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  425. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  426. package/ts3.5/dist/commonjs/tabs/lib/selection/index.d.ts +4 -0
  427. package/ts3.5/dist/commonjs/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  428. package/ts3.5/dist/commonjs/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  429. package/ts3.5/dist/commonjs/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  430. package/ts3.5/dist/commonjs/tabs/lib/useTabsModel.d.ts +39 -38
  431. package/ts3.5/dist/commonjs/tooltip/lib/OverflowTooltip.d.ts +10 -0
  432. package/ts3.5/dist/commonjs/tooltip/lib/useTooltip.d.ts +1 -1
  433. package/ts3.5/dist/es6/button/lib/parts/ButtonLabel.d.ts +1 -1
  434. package/ts3.5/dist/es6/common/index.d.ts +1 -0
  435. package/ts3.5/dist/es6/common/lib/EllipsisText.d.ts +5 -0
  436. package/ts3.5/dist/es6/common/lib/utils/components.d.ts +19 -9
  437. package/ts3.5/dist/es6/common/lib/utils/index.d.ts +1 -0
  438. package/ts3.5/dist/es6/common/lib/utils/useConstant.d.ts +9 -0
  439. package/ts3.5/dist/es6/common/lib/utils/useResizeObserver.d.ts +3 -0
  440. package/ts3.5/dist/es6/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  441. package/ts3.5/dist/es6/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  442. package/ts3.5/dist/es6/modal/lib/ModalOverlay.d.ts +4 -2
  443. package/ts3.5/dist/es6/modal/lib/hooks/useModalCard.d.ts +4 -16
  444. package/ts3.5/dist/es6/modal/lib/hooks/useModalHeading.d.ts +5 -17
  445. package/ts3.5/dist/es6/pagination/lib/Pagination/GoTo/Label.d.ts +3 -0
  446. package/ts3.5/dist/es6/pagination/lib/Pagination/PageList.d.ts +1 -1
  447. package/ts3.5/dist/es6/pagination/lib/Pagination/Pagination.d.ts +5 -5
  448. package/ts3.5/dist/es6/pagination/lib/Pagination/common/List.d.ts +1 -1
  449. package/ts3.5/dist/es6/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  450. package/ts3.5/dist/es6/pagination/lib/Pagination/types.d.ts +39 -0
  451. package/ts3.5/dist/es6/pagination/lib/Pagination/usePaginationModel.d.ts +19 -0
  452. package/ts3.5/dist/es6/popup/lib/hooks/usePopupCard.d.ts +5 -2
  453. package/ts3.5/dist/es6/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  454. package/ts3.5/dist/es6/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  455. package/ts3.5/dist/es6/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  456. package/ts3.5/dist/es6/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  457. package/ts3.5/dist/es6/tabs/index.d.ts +5 -0
  458. package/ts3.5/dist/es6/tabs/lib/Tabs.d.ts +35 -7
  459. package/ts3.5/dist/es6/tabs/lib/TabsItem.d.ts +107 -0
  460. package/ts3.5/dist/es6/tabs/lib/TabsList.d.ts +43 -0
  461. package/ts3.5/dist/es6/tabs/lib/TabsMenuPopper.d.ts +21 -0
  462. package/ts3.5/dist/es6/tabs/lib/TabsOverflowButton.d.ts +31 -0
  463. package/ts3.5/dist/es6/tabs/lib/{TabPanel.d.ts → TabsPanel.d.ts} +15 -5
  464. package/{dist/commonjs/tabs/lib/TabList.d.ts → ts3.5/dist/es6/tabs/lib/TabsPanels.d.ts} +15 -15
  465. package/ts3.5/dist/es6/tabs/lib/cursor/index.d.ts +1 -1
  466. package/ts3.5/dist/es6/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  467. package/ts3.5/dist/es6/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  468. package/ts3.5/dist/es6/tabs/lib/list/index.d.ts +2 -1
  469. package/ts3.5/dist/es6/tabs/lib/list/renderItem.d.ts +4 -0
  470. package/ts3.5/dist/es6/tabs/lib/list/useListModel.d.ts +25 -13
  471. package/ts3.5/dist/es6/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  472. package/ts3.5/dist/es6/tabs/lib/menu/Menu.d.ts +80 -0
  473. package/ts3.5/dist/es6/tabs/lib/menu/MenuCard.d.ts +17 -0
  474. package/ts3.5/dist/es6/tabs/lib/menu/MenuItem.d.ts +62 -0
  475. package/ts3.5/dist/es6/tabs/lib/menu/MenuList.d.ts +23 -0
  476. package/ts3.5/dist/es6/tabs/lib/menu/MenuPopper.d.ts +21 -0
  477. package/ts3.5/dist/es6/tabs/lib/menu/MenuTarget.d.ts +21 -0
  478. package/ts3.5/dist/es6/tabs/lib/menu/index.d.ts +8 -0
  479. package/ts3.5/dist/es6/tabs/lib/menu/useMenuModel.d.ts +35 -0
  480. package/ts3.5/dist/es6/tabs/lib/overflow/index.d.ts +5 -0
  481. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  482. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  483. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  484. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  485. package/ts3.5/dist/es6/tabs/lib/selection/index.d.ts +4 -0
  486. package/ts3.5/dist/es6/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  487. package/ts3.5/dist/es6/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  488. package/ts3.5/dist/es6/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  489. package/ts3.5/dist/es6/tabs/lib/useTabsModel.d.ts +39 -38
  490. package/ts3.5/dist/es6/tooltip/lib/OverflowTooltip.d.ts +10 -0
  491. package/ts3.5/dist/es6/tooltip/lib/useTooltip.d.ts +1 -1
  492. package/dist/commonjs/tabs/lib/Tab.d.ts +0 -49
  493. package/dist/commonjs/tabs/lib/Tab.d.ts.map +0 -1
  494. package/dist/commonjs/tabs/lib/Tab.js +0 -101
  495. package/dist/commonjs/tabs/lib/TabList.d.ts.map +0 -1
  496. package/dist/commonjs/tabs/lib/TabPanel.d.ts.map +0 -1
  497. package/dist/commonjs/tabs/lib/TabPanel.js +0 -56
  498. package/dist/commonjs/tabs/lib/cursor/hooks.d.ts +0 -39
  499. package/dist/commonjs/tabs/lib/cursor/hooks.d.ts.map +0 -1
  500. package/dist/commonjs/tabs/lib/hooks.d.ts +0 -10
  501. package/dist/commonjs/tabs/lib/hooks.d.ts.map +0 -1
  502. package/dist/commonjs/tabs/lib/list/hooks.d.ts +0 -11
  503. package/dist/commonjs/tabs/lib/list/hooks.d.ts.map +0 -1
  504. package/dist/commonjs/tabs/lib/list/hooks.js +0 -39
  505. package/dist/es6/tabs/lib/Tab.d.ts +0 -49
  506. package/dist/es6/tabs/lib/Tab.d.ts.map +0 -1
  507. package/dist/es6/tabs/lib/Tab.js +0 -92
  508. package/dist/es6/tabs/lib/TabList.d.ts.map +0 -1
  509. package/dist/es6/tabs/lib/TabPanel.d.ts.map +0 -1
  510. package/dist/es6/tabs/lib/TabPanel.js +0 -51
  511. package/dist/es6/tabs/lib/cursor/hooks.d.ts +0 -39
  512. package/dist/es6/tabs/lib/cursor/hooks.d.ts.map +0 -1
  513. package/dist/es6/tabs/lib/cursor/hooks.js +0 -108
  514. package/dist/es6/tabs/lib/hooks.d.ts +0 -10
  515. package/dist/es6/tabs/lib/hooks.d.ts.map +0 -1
  516. package/dist/es6/tabs/lib/list/hooks.d.ts +0 -11
  517. package/dist/es6/tabs/lib/list/hooks.d.ts.map +0 -1
  518. package/dist/es6/tabs/lib/list/hooks.js +0 -34
  519. package/tabs/lib/Tab.tsx +0 -176
  520. package/tabs/lib/TabList.tsx +0 -59
  521. package/tabs/lib/cursor/hooks.tsx +0 -122
  522. package/tabs/lib/hooks.tsx +0 -31
  523. package/tabs/lib/list/hooks.tsx +0 -45
  524. package/ts3.5/dist/commonjs/tabs/lib/Tab.d.ts +0 -49
  525. package/ts3.5/dist/commonjs/tabs/lib/cursor/hooks.d.ts +0 -39
  526. package/ts3.5/dist/commonjs/tabs/lib/hooks.d.ts +0 -10
  527. package/ts3.5/dist/commonjs/tabs/lib/list/hooks.d.ts +0 -11
  528. package/ts3.5/dist/es6/tabs/lib/Tab.d.ts +0 -49
  529. package/ts3.5/dist/es6/tabs/lib/cursor/hooks.d.ts +0 -39
  530. package/ts3.5/dist/es6/tabs/lib/hooks.d.ts +0 -10
  531. package/ts3.5/dist/es6/tabs/lib/list/hooks.d.ts +0 -11
@@ -0,0 +1,185 @@
1
+ import React from 'react';
2
+
3
+ import {createEventMap, ToModelConfig, useEventMap} from '@workday/canvas-kit-react/common';
4
+ import {
5
+ SelectionState,
6
+ SelectionEvents,
7
+ BaseSelectionModelConfig,
8
+ useSelectionModel,
9
+ SelectionModelConfig,
10
+ selectionEventMap,
11
+ SelectionModel,
12
+ } from '../selection';
13
+
14
+ export type OverflowState<T = unknown> = SelectionState<T> & {
15
+ containerWidth: number;
16
+ overflowTargetWidth: number;
17
+ itemWidthCache: Record<string, number>;
18
+ hiddenIds: string[];
19
+ };
20
+
21
+ export type OverflowEvents<T = unknown> = SelectionEvents<T> & {
22
+ setContainerWidth(data: {width?: number}): void;
23
+ setOverflowTargetWidth(data: {width: number}): void;
24
+ addItemWidth(data: {id: string; width: number}): void;
25
+ removeItemWidth(data: {id: string}): void;
26
+ addHiddenKey(data: {id: string}): void;
27
+ removeHiddenKey(data: {id: string}): void;
28
+ };
29
+
30
+ export interface OverflowModel<T = unknown> extends SelectionModel<T> {
31
+ state: OverflowState<T>;
32
+ events: OverflowEvents<T>;
33
+ }
34
+
35
+ export const overflowEventMap = createEventMap<OverflowEvents>()({
36
+ guards: {
37
+ ...selectionEventMap.guards,
38
+ shouldSetContainerWidth: 'setContainerWidth',
39
+ shouldSetOverflowTargetWidth: 'setOverflowTargetWidth',
40
+ shouldAddItemWidth: 'addItemWidth',
41
+ shouldRemoveItemWidth: 'removeItemWidth',
42
+ shouldAddHiddenKey: 'addHiddenKey',
43
+ shouldRemoveHiddenKey: 'removeHiddenKey',
44
+ },
45
+ callbacks: {
46
+ ...selectionEventMap.callbacks,
47
+ onSetContainerWidth: 'setContainerWidth',
48
+ onSetOverflowTargetWidth: 'setOverflowTargetWidth',
49
+ onAddItemWidth: 'addItemWidth',
50
+ onRemoveItemWidth: 'removeItemWidth',
51
+ onAddHiddenKey: 'addHiddenKey',
52
+ onRemoveHiddenKey: 'removeHiddenKey',
53
+ },
54
+ });
55
+
56
+ export type BaseOverflowModelConfig<T> = BaseSelectionModelConfig<T> & {
57
+ initialHiddenIds?: string[];
58
+ containerWidth?: number;
59
+ };
60
+
61
+ export type OverflowModelConfig<T> = BaseOverflowModelConfig<T> &
62
+ Partial<ToModelConfig<OverflowState<T>, OverflowEvents<T>, typeof selectionEventMap>>;
63
+
64
+ export function getHiddenIds(
65
+ containerWidth: number,
66
+ overflowTargetWidth: number,
67
+ itemWidthCache: Record<string, number>,
68
+ selectedIds: string[] | 'all'
69
+ ): string[] {
70
+ /** Allows us to prioritize showing the selected item */
71
+ let selectedKey: undefined | string;
72
+ /** Tally of combined item widths. We'll add items that fit until the container is full */
73
+ let itemWidth = 0;
74
+ /** Tally ids that won't fit inside the container. These will be used by components to hide
75
+ * elements that won't fit in the container */
76
+ const hiddenIds: string[] = [];
77
+
78
+ if (selectedIds !== 'all' && selectedIds.length) {
79
+ selectedKey = selectedIds[0];
80
+ }
81
+
82
+ if (
83
+ Object.keys(itemWidthCache).reduce((sum, key) => sum + itemWidthCache[key], 0) <= containerWidth
84
+ ) {
85
+ // All items fit, return empty array
86
+ return [];
87
+ } else if (selectedKey) {
88
+ if (itemWidthCache[selectedKey] + overflowTargetWidth > containerWidth) {
89
+ // If the selected item doesn't fit, only show overflow (all items hidden)
90
+ return Object.keys(itemWidthCache);
91
+ } else {
92
+ // at least the selected item and overflow target fit. Update our itemWidth with the sum
93
+ itemWidth += itemWidthCache[selectedKey] + overflowTargetWidth;
94
+ }
95
+ }
96
+
97
+ for (const key in itemWidthCache) {
98
+ if (key !== selectedKey) {
99
+ itemWidth += itemWidthCache[key];
100
+ if (itemWidth > containerWidth) {
101
+ hiddenIds.push(key);
102
+ }
103
+ }
104
+ }
105
+
106
+ return hiddenIds;
107
+ }
108
+
109
+ export const useOverflowModel = <T extends unknown>(
110
+ config: OverflowModelConfig<T> = {}
111
+ ): OverflowModel<T> => {
112
+ const [hiddenIds, setHiddenIds] = React.useState(config.initialHiddenIds || []);
113
+ const [itemWidthCache, setItemWidthCache] = React.useState<Record<string, number>>({});
114
+ const [containerWidth, setContainerWidth] = React.useState(0);
115
+ const containerWidthRef = React.useRef(0);
116
+ const itemWidthCacheRef = React.useRef(itemWidthCache);
117
+ const [overflowTargetWidth, setOverflowTargetWidth] = React.useState(0);
118
+ const overflowTargetWidthRef = React.useRef(0);
119
+
120
+ // Cursors skip over disabled ids, but know nothing of hidden ids. We'll go ahead and disable
121
+ // hidden ids as well
122
+ const nonInteractiveIds = (config.nonInteractiveIds || []).concat(hiddenIds);
123
+
124
+ const model = useSelectionModel({...(config as SelectionModelConfig<T>), nonInteractiveIds});
125
+
126
+ const state = {
127
+ ...model.state,
128
+ hiddenIds,
129
+ itemWidthCache,
130
+ containerWidth,
131
+ overflowTargetWidth,
132
+ };
133
+
134
+ const events = useEventMap(overflowEventMap, state, config, {
135
+ ...model.events,
136
+ select(data) {
137
+ const {selectedIds} = model.selection.select(data.id, state as SelectionState<T>);
138
+ const ids = getHiddenIds(
139
+ containerWidthRef.current,
140
+ overflowTargetWidthRef.current,
141
+ itemWidthCacheRef.current,
142
+ selectedIds
143
+ );
144
+ model.events.select(data);
145
+
146
+ setHiddenIds(ids);
147
+ },
148
+ setContainerWidth({width}) {
149
+ containerWidthRef.current = width || 0;
150
+ setContainerWidth(width || 0);
151
+
152
+ const ids = getHiddenIds(
153
+ containerWidthRef.current,
154
+ overflowTargetWidthRef.current,
155
+ itemWidthCacheRef.current,
156
+ state.selectedIds
157
+ );
158
+
159
+ setHiddenIds(ids);
160
+ },
161
+ setOverflowTargetWidth({width}) {
162
+ overflowTargetWidthRef.current = width;
163
+ setOverflowTargetWidth(width);
164
+ },
165
+ addItemWidth({id, width}) {
166
+ itemWidthCacheRef.current = {...itemWidthCacheRef.current, [id]: width};
167
+
168
+ setItemWidthCache(itemWidthCacheRef.current);
169
+ },
170
+ removeItemWidth({id}) {
171
+ const newCache = {...itemWidthCacheRef.current};
172
+ delete newCache[id];
173
+ itemWidthCacheRef.current = newCache;
174
+ setItemWidthCache(itemWidthCacheRef.current);
175
+ },
176
+ addHiddenKey({id}) {
177
+ setHiddenIds(ids => ids.concat(id));
178
+ },
179
+ removeHiddenKey({id}) {
180
+ setHiddenIds(ids => ids.filter(key => key !== id));
181
+ },
182
+ } as OverflowEvents<T>);
183
+
184
+ return {state, events, selection: model.selection, getId: model.getId};
185
+ };
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+
3
+ import {createHook, useMountLayout, useLocalRef} from '@workday/canvas-kit-react/common';
4
+
5
+ import {OverflowModel} from './useOverflowModel';
6
+
7
+ // use a hidden style instead of `hidden` attribute for measurement purposes. `hidden` elements have no dimensions
8
+ const hiddenStyle = {
9
+ position: 'absolute',
10
+ left: -99999,
11
+ };
12
+
13
+ export const useOverflowTarget = createHook(
14
+ (model: OverflowModel, ref?: React.Ref<HTMLButtonElement>) => {
15
+ const {elementRef, localRef} = useLocalRef(ref);
16
+ // track first render to force correct size calculations
17
+ const firstRender = React.useRef(true);
18
+
19
+ useMountLayout(() => {
20
+ firstRender.current = false;
21
+ if (localRef.current) {
22
+ const styles = getComputedStyle(localRef.current);
23
+
24
+ model.events.setOverflowTargetWidth({
25
+ width:
26
+ localRef.current.offsetWidth +
27
+ parseFloat(styles.marginLeft) +
28
+ parseFloat(styles.marginRight),
29
+ });
30
+ }
31
+ });
32
+
33
+ const isHidden = !model.state.hiddenIds.length;
34
+
35
+ return {
36
+ ref: elementRef,
37
+ 'aria-hidden': isHidden,
38
+ tabIndex: -1,
39
+ style: isHidden ? hiddenStyle : {},
40
+ };
41
+ }
42
+ );
@@ -0,0 +1,3 @@
1
+ export * from './useSelectionModel';
2
+ export * from './useSelectionItem';
3
+ export * from './useResetCursorOnBlur';
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+
3
+ import {createHook} from '@workday/canvas-kit-react/common';
4
+ import {orientationKeyMap} from '../cursor';
5
+
6
+ import {SelectionModel} from './useSelectionModel';
7
+
8
+ /**
9
+ * Reset the cursor to the selected item when the list looses focus
10
+ */
11
+ export const useResetCursorOnBlur = createHook(({state, events}: SelectionModel) => {
12
+ const programmaticFocusRef = React.useRef(false);
13
+ return {
14
+ onKeyDown(event: React.KeyboardEvent) {
15
+ // Programmatic focus only on any focus change via keyboard
16
+ if (Object.keys(orientationKeyMap[state.orientation]).indexOf(event.key) !== -1) {
17
+ programmaticFocusRef.current = true;
18
+ }
19
+ },
20
+ onFocus() {
21
+ programmaticFocusRef.current = false;
22
+ },
23
+ onBlur() {
24
+ if (!programmaticFocusRef.current) {
25
+ events.goTo({id: state.selectedIds[0]});
26
+ }
27
+ },
28
+ };
29
+ });
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+
3
+ import {createHook} from '@workday/canvas-kit-react/common';
4
+
5
+ import {SelectionModel} from './useSelectionModel';
6
+
7
+ export const useSelectionItem = createHook(
8
+ (
9
+ {state, events}: SelectionModel,
10
+ _?: React.Ref<HTMLElement>,
11
+ elemProps: {name?: string} = {}
12
+ ) => {
13
+ const name = elemProps.name || '';
14
+ const onClick = (event: React.MouseEvent<HTMLElement>) => {
15
+ if (
16
+ state.nonInteractiveIds.includes(name) ||
17
+ event.currentTarget.hasAttribute('aria-disabled')
18
+ ) {
19
+ return;
20
+ }
21
+ events.select({id: name});
22
+ };
23
+
24
+ return {onClick};
25
+ }
26
+ );
@@ -0,0 +1,133 @@
1
+ import React from 'react';
2
+ import {createEventMap, ToModelConfig, useEventMap} from '@workday/canvas-kit-react/common';
3
+ import {
4
+ CursorState,
5
+ CursorEvents,
6
+ BaseCursorModelConfig,
7
+ useCursorModel,
8
+ CursorModelConfig,
9
+ cursorEventMap,
10
+ CursorModel,
11
+ } from '../cursor/useCursorModel';
12
+
13
+ export type Orientation = 'horizontal' | 'vertical';
14
+
15
+ export type SelectionState<T = unknown> = CursorState<T> & {
16
+ selectedIds: 'all' | string[];
17
+ unselectedIds: string[];
18
+ };
19
+
20
+ export type SelectionEvents<T = unknown> = CursorEvents<T> & {
21
+ /** Select a specific item by its identifier. */
22
+ select(data: {id: string}): void;
23
+ /** Select all items. This will set `selectedIds` to `'all'` and remove all `unselectedIds`.
24
+ * This is especially useful for virtual lists where not all items are loaded in memory.
25
+ */
26
+ selectAll(): void;
27
+ unselectAll(): void;
28
+ };
29
+
30
+ export interface SelectionModel<T = unknown> extends CursorModel<T> {
31
+ state: SelectionState<T>;
32
+ events: SelectionEvents<T>;
33
+ selection: SelectionManager;
34
+ }
35
+
36
+ export const selectionEventMap = createEventMap<SelectionEvents>()({
37
+ guards: {
38
+ ...cursorEventMap.guards,
39
+ /** Should a cursor position be set? Use only in advance use-cases */
40
+ shouldSelect: 'select',
41
+ },
42
+ callbacks: {
43
+ ...cursorEventMap.callbacks,
44
+ /**
45
+ * Called when a cursor position has been changed. Useful to set state or perform side effects.
46
+ * This is called during state change batching, so calling state setters will not invoke extra
47
+ * renders.
48
+ */
49
+ onSelect: 'select',
50
+ },
51
+ });
52
+
53
+ /**
54
+ * A SelectionManager is used
55
+ */
56
+ export interface SelectionManager {
57
+ select(
58
+ id: string,
59
+ prevState: Pick<SelectionState, 'selectedIds' | 'unselectedIds'>
60
+ ): Pick<SelectionState, 'selectedIds' | 'unselectedIds'>;
61
+ }
62
+
63
+ export const isSelected = (
64
+ id: string,
65
+ {selectedIds, unselectedIds}: Pick<SelectionState, 'selectedIds' | 'unselectedIds'>
66
+ ) => {
67
+ if (selectedIds === 'all') {
68
+ return !unselectedIds.includes(id);
69
+ }
70
+ return selectedIds.includes(id);
71
+ };
72
+
73
+ export const singleSelectionManager: SelectionManager = {
74
+ select(id: string) {
75
+ return {selectedIds: [id], unselectedIds: []};
76
+ },
77
+ };
78
+
79
+ export const multiSelectionManager: SelectionManager = {
80
+ select(id: string, {selectedIds, unselectedIds}) {
81
+ if (selectedIds === 'all') {
82
+ // If we have all selected, start adding/removing from `unselectedIds`
83
+ const existingKey = unselectedIds.includes(id);
84
+ return {
85
+ selectedIds: 'all',
86
+ unselectedIds: existingKey
87
+ ? unselectedIds.filter(key => key !== id)
88
+ : unselectedIds.concat(id),
89
+ };
90
+ } else {
91
+ const existingKey = selectedIds.includes(id);
92
+ return {
93
+ selectedIds: existingKey ? selectedIds.filter(key => key !== id) : selectedIds.concat(id),
94
+ unselectedIds: [],
95
+ };
96
+ }
97
+ },
98
+ };
99
+
100
+ export type BaseSelectionModelConfig<T> = BaseCursorModelConfig<T> & {
101
+ initialSelectedIds?: string[];
102
+ initialUnselectedIds?: string[];
103
+ selection?: SelectionManager;
104
+ };
105
+
106
+ export type SelectionModelConfig<T> = BaseSelectionModelConfig<T> &
107
+ Partial<ToModelConfig<SelectionState<T>, SelectionEvents<T>, typeof selectionEventMap>>;
108
+
109
+ export const useSelectionModel = <T extends unknown>(
110
+ config: SelectionModelConfig<T> = {}
111
+ ): SelectionModel<T> => {
112
+ const cursor = useCursorModel(config as CursorModelConfig<T>);
113
+ const [selectedIds, setSelectedIds] = React.useState<'all' | string[]>(
114
+ config.initialSelectedIds || []
115
+ );
116
+ const [unselectedIds, setUnselectedIds] = React.useState(config.initialUnselectedIds || []);
117
+
118
+ const selection = config.selection || singleSelectionManager;
119
+
120
+ const state = {...cursor.state, selectedIds, unselectedIds};
121
+
122
+ const events = useEventMap(selectionEventMap, state, config, {
123
+ ...cursor.events,
124
+ select(data) {
125
+ const {selectedIds, unselectedIds} = selection.select(data.id, state);
126
+ setSelectedIds(selectedIds);
127
+ setUnselectedIds(unselectedIds);
128
+ events.goTo({id: data.id});
129
+ },
130
+ } as SelectionEvents<T>);
131
+
132
+ return {state, events, selection, getId: cursor.getId};
133
+ };
@@ -1,79 +1,67 @@
1
1
  import React from 'react';
2
- import {createEventMap, Model, ToModelConfig, useEventMap} from '@workday/canvas-kit-react/common';
3
2
  import {
4
- CursorState,
5
- CursorEvents,
6
- cursorEventMap,
7
- useCursorModel,
8
- BaseCursorModelConfig,
9
- Orientation,
10
- CursorModelConfig,
11
- getNext,
12
- } from './cursor/useCursorModel';
13
- import {Item, ListEvents, ListState, useListModel} from './list/useListModel';
3
+ createEventMap,
4
+ ToModelConfig,
5
+ useEventMap,
6
+ useUniqueId,
7
+ } from '@workday/canvas-kit-react/common';
8
+ import {Orientation} from './cursor';
9
+ import {defaultGetId, ListEvents, ListState, useListModel} from './list';
10
+ import {MenuModel, MenuModelConfig, useMenuModel} from './menu';
11
+ import {
12
+ overflowEventMap,
13
+ OverflowEvents,
14
+ OverflowState,
15
+ OverflowModelConfig,
16
+ BaseOverflowModelConfig,
17
+ useOverflowModel,
18
+ OverflowModel,
19
+ } from './overflow';
14
20
 
15
- export type TabsState = CursorState & {
16
- /**
17
- * The name of the active tab provided to the `Tabs.Item` component. If no name is provided, it
18
- * will be a string of the index position.
19
- */
20
- activeTab: string;
21
+ export type TabsState<T> = OverflowState<T> & {
22
+ /** IDREF of the list. Children ids can be derived from this id */
23
+ id: string;
21
24
  /**
22
25
  * A list of panels. Uses `ListModel`
23
26
  */
24
- panels: Item[];
27
+ panels: T[];
25
28
  /**
26
29
  * A React.Ref of the current item index. A ref is used to allow for updating outside the normal
27
30
  * React state cycle to ensure accurate index tracking as items are registered within the same
28
31
  * state setting phase.
29
32
  */
30
- panelIndexRef: ListState['indexRef'];
33
+ panelIndexRef: ListState<T>['indexRef'];
34
+ orientation: Orientation;
35
+ getId: (item: T) => string;
31
36
  };
32
37
 
33
- export type TabsEvents = CursorEvents & {
34
- /**
35
- * This event will set the `activeTab` in the state. Called when a user activates a tab
36
- */
37
- activate(data: {
38
- /**
39
- * The name of the tab provided to the `Tabs.Item` component. If no name is provided, it will
40
- * be a string of the index position
41
- */
42
- tab: string;
43
- }): void;
38
+ export type TabsEvents<T = unknown> = OverflowEvents<T> & {
44
39
  /**
45
40
  * This event registers panels with state.panels. Called when a panel is mounted.
46
41
  */
47
- registerPanel: ListEvents['registerItem'];
42
+ registerPanel: ListEvents<T>['registerItem'];
48
43
  /**
49
44
  * This event unregisters panels with state.panels. Called when a panel is unmounted.
50
45
  */
51
- unregisterPanel: ListEvents['unregisterItem'];
46
+ unregisterPanel: ListEvents<T>['unregisterItem'];
52
47
  };
53
48
 
54
- export type TabsModel = Model<TabsState, TabsEvents>;
49
+ export interface TabsModel<T = unknown> extends OverflowModel<T> {
50
+ state: TabsState<T>;
51
+ events: TabsEvents<T>;
52
+ menu: MenuModel<T>;
53
+ }
55
54
 
56
55
  export const tabEventMap = createEventMap<TabsEvents>()({
57
56
  guards: {
58
- ...cursorEventMap.guards,
59
- /**
60
- * Should the tab activate? Can prevent the tab from activating. Use this only for advanced
61
- * use-cases.
62
- */
63
- shouldActivate: 'activate',
57
+ ...overflowEventMap.guards,
64
58
  },
65
59
  callbacks: {
66
- ...cursorEventMap.callbacks,
67
- /**
68
- * This callback will fire whenever a tab is activated. The data will contain the tab's named
69
- * passed to the `Tabs.Item` component. If no name was passed, it will be the index of the tab
70
- * as a string.
71
- */
72
- onActivate: 'activate',
60
+ ...overflowEventMap.callbacks,
73
61
  },
74
62
  });
75
63
 
76
- export type BaseTabsModelConfig = Omit<BaseCursorModelConfig, 'orientation'> & {
64
+ export type BaseTabsModelConfig<T> = Omit<BaseOverflowModelConfig<T>, 'orientation'> & {
77
65
  /**
78
66
  * Optional id for the whole `Tabs` group. The `aria-controls` of the `Tab.Item` and `id` of the
79
67
  * `Tab.Panel` will automatically derived from this id. If not provided, a unique id will be
@@ -92,55 +80,82 @@ export type BaseTabsModelConfig = Omit<BaseCursorModelConfig, 'orientation'> & {
92
80
  * @default 'horizontal'
93
81
  */
94
82
  orientation?: Orientation;
83
+ menuConfig?: MenuModelConfig<T>;
95
84
  };
96
85
 
97
- export type TabsModelConfig = BaseTabsModelConfig &
98
- Partial<ToModelConfig<TabsState, TabsEvents, typeof tabEventMap>>;
86
+ export type TabsModelConfig<T> = BaseTabsModelConfig<T> &
87
+ Partial<ToModelConfig<TabsState<T>, TabsEvents<T>, typeof tabEventMap>>;
99
88
 
100
- export const useTabsModel = (config: TabsModelConfig = {}): TabsModel => {
101
- const initialTabRef = React.useRef(config.initialTab);
102
- const [activeTab, setActiveTab] = React.useState(initialTabRef.current || '');
89
+ export const useTabsModel = <T extends unknown>(config: TabsModelConfig<T> = {}): TabsModel<T> => {
90
+ const id = useUniqueId(config.id);
91
+ const initialSelectedRef = React.useRef(config.initialTab);
92
+ const getId = config.getId || defaultGetId;
103
93
 
104
- const cursor = useCursorModel({
94
+ const items = config.items; // || (emptyItems as T[]);
95
+
96
+ const model = useOverflowModel<T>({
97
+ ...(config as OverflowModelConfig<T>),
98
+ id: `${id}-tabs`,
105
99
  orientation: config.orientation || 'horizontal',
106
- ...(config as CursorModelConfig),
100
+ items,
101
+ onRegisterItem({data, prevState}) {
102
+ config?.onRegisterItem?.({data, prevState: prevState as TabsState<T>});
103
+ if (!initialSelectedRef.current) {
104
+ initialSelectedRef.current = getId(data.item);
105
+ events.select({id: initialSelectedRef.current});
106
+ }
107
+ },
108
+ initialSelectedIds: config.initialTab
109
+ ? [config.initialTab]
110
+ : config.items?.length
111
+ ? [getId(config.items![0])]
112
+ : [],
107
113
  });
108
- const panels = useListModel();
109
114
 
110
- const state = {
111
- ...cursor.state,
112
- activeTab,
115
+ const panels = useListModel<T>();
116
+
117
+ const state: TabsState<T> = {
118
+ ...model.state,
119
+ id,
120
+ getId,
121
+ orientation: config.orientation || 'horizontal',
113
122
  panels: panels.state.items,
114
123
  panelIndexRef: panels.state.indexRef,
115
124
  };
116
125
 
126
+ const overflowItems = React.useMemo(
127
+ () => (items ? items.filter(item => state.hiddenIds.includes(getId(item))) : undefined),
128
+ // eslint-disable-next-line react-hooks/exhaustive-deps
129
+ [state.hiddenIds, items]
130
+ );
131
+
117
132
  const events = useEventMap(tabEventMap, state, config, {
118
- ...cursor.events,
119
- activate(data) {
120
- setActiveTab(data.tab);
121
- events.goTo({id: data.tab});
122
- },
123
- registerItem(data) {
124
- if (!initialTabRef.current) {
125
- initialTabRef.current = data.item.id;
126
- setActiveTab(initialTabRef.current);
127
- }
128
- cursor.events.registerItem(data);
129
- },
130
- unregisterItem(data) {
131
- // Activate the next tab if the current one is removed
132
- if (state.activeTab === data.id && state.items.some(i => i.ref.current !== null)) {
133
- const item = getNext(state.activeTab, state.items);
134
- events.activate({tab: item.id});
135
- }
136
- cursor.events.unregisterItem(data);
137
- },
133
+ ...model.events,
138
134
  registerPanel: panels.events.registerItem,
139
135
  unregisterPanel: panels.events.unregisterItem,
136
+ } as TabsEvents<T>);
137
+
138
+ const menu = useMenuModel({
139
+ id: `${id}-menu`,
140
+ items: overflowItems,
141
+ nonInteractiveIds: state.nonInteractiveIds.filter(key => !state.hiddenIds.includes(key)),
142
+ onSelect({data, prevState}) {
143
+ menu.events.hide();
144
+ events.select(data);
145
+ config.menuConfig?.onSelect?.({data, prevState});
146
+ },
147
+ onShow({data, prevState}) {
148
+ // Always select the first item when the menu is opened
149
+ menu.events.first();
150
+ config.menuConfig?.onShow?.({data, prevState});
151
+ },
140
152
  });
141
153
 
142
154
  return {
143
155
  state,
144
156
  events,
157
+ menu,
158
+ getId: model.getId,
159
+ selection: model.selection,
145
160
  };
146
161
  };
@@ -10,7 +10,7 @@ import {useTooltip} from './useTooltip';
10
10
  * Look for an element within the tree for an overflow element (auto, scroll, clip, or hidden).
11
11
  * This could be the passed element, or a descendant. If no element is found, `null` is returned.
12
12
  */
13
- const findOverflowElement = (element: Element): Element | null => {
13
+ export const findOverflowElement = (element: Element): Element | null => {
14
14
  const style = getComputedStyle(element);
15
15
  if (
16
16
  style.overflow === 'auto' ||
@@ -36,11 +36,12 @@ const findOverflowElement = (element: Element): Element | null => {
36
36
  * Look for an element within the tree for a `text-overflow` CSS property of `ellipsis`.
37
37
  * This could be the passed element, or a descendant. If no element is found, `null` is returned.
38
38
  */
39
- const findEllipsisElement = (element: Element): Element | null => {
39
+ export const findEllipsisElement = (element: Element): Element | null => {
40
40
  const style = getComputedStyle(element);
41
41
  if (style.textOverflow === 'ellipsis' || Number(style.webkitLineClamp) > 0) {
42
42
  return element;
43
- } else {
43
+ } else if (element.children) {
44
+ // `children` is not defined for SVGElement in IE11
44
45
  for (let i = 0; i < element.children.length; i++) {
45
46
  const overflowElement = findEllipsisElement(element.children[i]);
46
47
  if (overflowElement) {
@@ -49,6 +50,7 @@ const findEllipsisElement = (element: Element): Element | null => {
49
50
  }
50
51
  return null;
51
52
  }
53
+ return null;
52
54
  };
53
55
 
54
56
  const isOverflowed = (element: Element) => {