@fluentui-react-native/menu 1.15.0 → 1.15.1

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 (369) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/SPEC.md +8 -4
  3. package/lib/Menu/Menu.d.ts +2 -2
  4. package/lib/Menu/Menu.js +12 -12
  5. package/lib/Menu/Menu.types.d.ts +47 -47
  6. package/lib/Menu/Menu.types.js +4 -4
  7. package/lib/Menu/index.d.ts +1 -1
  8. package/lib/Menu/index.js +1 -1
  9. package/lib/Menu/renderMenu.android.d.ts +2 -6
  10. package/lib/Menu/renderMenu.android.js +10 -17
  11. package/lib/Menu/renderMenu.d.ts +2 -6
  12. package/lib/Menu/renderMenu.js +5 -8
  13. package/lib/Menu/useMenu.android.d.ts +1 -1
  14. package/lib/Menu/useMenu.android.js +245 -251
  15. package/lib/Menu/useMenu.d.ts +1 -1
  16. package/lib/Menu/useMenu.js +70 -75
  17. package/lib/Menu/useMenuContextValue.d.ts +1 -1
  18. package/lib/Menu/useMenuContextValue.js +4 -4
  19. package/lib/MenuCallout/MenuCallout.android.d.ts +2 -2
  20. package/lib/MenuCallout/MenuCallout.android.js +19 -39
  21. package/lib/MenuCallout/MenuCallout.d.ts +2 -2
  22. package/lib/MenuCallout/MenuCallout.js +7 -7
  23. package/lib/MenuCallout/MenuCallout.types.d.ts +13 -13
  24. package/lib/MenuCallout/MenuCallout.types.d.ts.map +1 -1
  25. package/lib/MenuCallout/MenuCallout.types.js +1 -1
  26. package/lib/MenuCallout/index.d.ts +1 -1
  27. package/lib/MenuCallout/index.js +1 -1
  28. package/lib/MenuDivider/MenuDivider.d.ts +2 -7
  29. package/lib/MenuDivider/MenuDivider.js +13 -13
  30. package/lib/MenuDivider/MenuDivider.styling.d.ts +1 -1
  31. package/lib/MenuDivider/MenuDivider.styling.js +16 -19
  32. package/lib/MenuDivider/MenuDivider.types.d.ts +12 -12
  33. package/lib/MenuDivider/MenuDivider.types.js +1 -1
  34. package/lib/MenuDivider/MenuDividerTokens.android.d.ts +1 -1
  35. package/lib/MenuDivider/MenuDividerTokens.android.js +4 -4
  36. package/lib/MenuDivider/MenuDividerTokens.d.ts +1 -1
  37. package/lib/MenuDivider/MenuDividerTokens.js +4 -4
  38. package/lib/MenuDivider/MenuDividerTokens.macos.d.ts +1 -1
  39. package/lib/MenuDivider/MenuDividerTokens.macos.js +4 -4
  40. package/lib/MenuDivider/MenuDividerTokens.win32.d.ts +1 -1
  41. package/lib/MenuDivider/MenuDividerTokens.win32.js +4 -4
  42. package/lib/MenuDivider/index.d.ts +1 -1
  43. package/lib/MenuDivider/index.js +1 -1
  44. package/lib/MenuGroup/MenuGroup.d.ts +2 -7
  45. package/lib/MenuGroup/MenuGroup.js +51 -63
  46. package/lib/MenuGroup/MenuGroup.types.d.ts +7 -7
  47. package/lib/MenuGroup/MenuGroup.types.js +1 -1
  48. package/lib/MenuGroup/index.d.ts +1 -1
  49. package/lib/MenuGroup/index.js +1 -1
  50. package/lib/MenuGroupHeader/MenuGroupHeader.d.ts +2 -7
  51. package/lib/MenuGroupHeader/MenuGroupHeader.js +14 -14
  52. package/lib/MenuGroupHeader/MenuGroupHeader.styling.d.ts +1 -1
  53. package/lib/MenuGroupHeader/MenuGroupHeader.styling.js +13 -16
  54. package/lib/MenuGroupHeader/MenuGroupHeader.types.d.ts +7 -7
  55. package/lib/MenuGroupHeader/MenuGroupHeader.types.js +1 -1
  56. package/lib/MenuGroupHeader/MenuGroupHeaderTokens.d.ts +1 -1
  57. package/lib/MenuGroupHeader/MenuGroupHeaderTokens.js +7 -7
  58. package/lib/MenuGroupHeader/MenuGroupHeaderTokens.macos.d.ts +1 -1
  59. package/lib/MenuGroupHeader/MenuGroupHeaderTokens.macos.js +8 -8
  60. package/lib/MenuGroupHeader/index.d.ts +1 -1
  61. package/lib/MenuGroupHeader/index.js +1 -1
  62. package/lib/MenuItem/MenuItem.d.ts +2 -7
  63. package/lib/MenuItem/MenuItem.js +41 -63
  64. package/lib/MenuItem/MenuItem.styling.d.ts +1 -1
  65. package/lib/MenuItem/MenuItem.styling.js +52 -70
  66. package/lib/MenuItem/MenuItem.types.d.ts +83 -83
  67. package/lib/MenuItem/MenuItem.types.js +1 -1
  68. package/lib/MenuItem/MenuItemTokens.android.d.ts +1 -1
  69. package/lib/MenuItem/MenuItemTokens.android.js +17 -17
  70. package/lib/MenuItem/MenuItemTokens.d.ts +1 -1
  71. package/lib/MenuItem/MenuItemTokens.js +35 -35
  72. package/lib/MenuItem/MenuItemTokens.macos.d.ts +1 -1
  73. package/lib/MenuItem/MenuItemTokens.macos.js +34 -34
  74. package/lib/MenuItem/MenuItemTokens.win32.d.ts +1 -1
  75. package/lib/MenuItem/MenuItemTokens.win32.js +36 -36
  76. package/lib/MenuItem/index.d.ts +1 -1
  77. package/lib/MenuItem/index.js +1 -1
  78. package/lib/MenuItem/useMenuItem.d.ts +1 -1
  79. package/lib/MenuItem/useMenuItem.js +101 -111
  80. package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts +3 -11
  81. package/lib/MenuItemCheckbox/MenuItemCheckbox.js +26 -54
  82. package/lib/MenuItemCheckbox/MenuItemCheckbox.styling.d.ts +1 -1
  83. package/lib/MenuItemCheckbox/MenuItemCheckbox.styling.js +62 -81
  84. package/lib/MenuItemCheckbox/MenuItemCheckbox.types.d.ts +89 -90
  85. package/lib/MenuItemCheckbox/MenuItemCheckbox.types.d.ts.map +1 -1
  86. package/lib/MenuItemCheckbox/MenuItemCheckbox.types.js +1 -1
  87. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.android.d.ts +1 -1
  88. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.android.js +35 -35
  89. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.d.ts +1 -1
  90. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.js +44 -44
  91. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.macos.d.ts +1 -1
  92. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.macos.js +42 -42
  93. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.win32.d.ts +1 -1
  94. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.win32.js +45 -45
  95. package/lib/MenuItemCheckbox/index.d.ts +2 -8
  96. package/lib/MenuItemCheckbox/index.js +1 -1
  97. package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts +2 -5
  98. package/lib/MenuItemCheckbox/useMenuItemCheckbox.js +104 -129
  99. package/lib/MenuItemRadio/MenuItemRadio.d.ts +3 -11
  100. package/lib/MenuItemRadio/MenuItemRadio.js +26 -54
  101. package/lib/MenuItemRadio/MenuItemRadio.styling.android.d.ts +1 -1
  102. package/lib/MenuItemRadio/MenuItemRadio.styling.android.js +60 -78
  103. package/lib/MenuItemRadio/MenuItemRadio.styling.d.ts +1 -1
  104. package/lib/MenuItemRadio/MenuItemRadio.styling.js +44 -59
  105. package/lib/MenuItemRadio/MenuItemRadio.types.d.ts +120 -121
  106. package/lib/MenuItemRadio/MenuItemRadio.types.d.ts.map +1 -1
  107. package/lib/MenuItemRadio/MenuItemRadio.types.js +1 -1
  108. package/lib/MenuItemRadio/MenuItemRadioTokens.android.d.ts +1 -1
  109. package/lib/MenuItemRadio/MenuItemRadioTokens.android.js +38 -38
  110. package/lib/MenuItemRadio/MenuItemRadioTokens.d.ts +1 -1
  111. package/lib/MenuItemRadio/MenuItemRadioTokens.js +45 -45
  112. package/lib/MenuItemRadio/MenuItemRadioTokens.macos.d.ts +1 -1
  113. package/lib/MenuItemRadio/MenuItemRadioTokens.macos.js +43 -43
  114. package/lib/MenuItemRadio/index.d.ts +2 -8
  115. package/lib/MenuItemRadio/index.js +1 -1
  116. package/lib/MenuItemRadio/useMenuItemRadio.d.ts +1 -1
  117. package/lib/MenuItemRadio/useMenuItemRadio.js +23 -26
  118. package/lib/MenuList/MenuList.d.ts +2 -7
  119. package/lib/MenuList/MenuList.js +54 -70
  120. package/lib/MenuList/MenuList.styling.d.ts +1 -1
  121. package/lib/MenuList/MenuList.styling.js +21 -27
  122. package/lib/MenuList/MenuList.types.d.ts +72 -72
  123. package/lib/MenuList/MenuList.types.js +1 -1
  124. package/lib/MenuList/MenuListTokens.android.d.ts +1 -1
  125. package/lib/MenuList/MenuListTokens.android.js +4 -4
  126. package/lib/MenuList/MenuListTokens.d.ts +1 -1
  127. package/lib/MenuList/MenuListTokens.js +6 -6
  128. package/lib/MenuList/MenuListTokens.macos.d.ts +1 -1
  129. package/lib/MenuList/MenuListTokens.macos.js +4 -4
  130. package/lib/MenuList/MenuListTokens.win32.d.ts +1 -1
  131. package/lib/MenuList/MenuListTokens.win32.js +9 -9
  132. package/lib/MenuList/index.d.ts +1 -1
  133. package/lib/MenuList/index.js +1 -1
  134. package/lib/MenuList/useMenuList.d.ts +1 -1
  135. package/lib/MenuList/useMenuList.js +142 -159
  136. package/lib/MenuList/useMenuListContextValue.d.ts +1 -1
  137. package/lib/MenuList/useMenuListContextValue.js +2 -2
  138. package/lib/MenuPopover/MenuPopover.d.ts +3 -9
  139. package/lib/MenuPopover/MenuPopover.d.ts.map +1 -1
  140. package/lib/MenuPopover/MenuPopover.js +35 -35
  141. package/lib/MenuPopover/MenuPopover.types.d.ts +14 -14
  142. package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  143. package/lib/MenuPopover/MenuPopover.types.js +1 -1
  144. package/lib/MenuPopover/MenuPopoverTokens.android.d.ts +3 -7
  145. package/lib/MenuPopover/MenuPopoverTokens.android.d.ts.map +1 -1
  146. package/lib/MenuPopover/MenuPopoverTokens.android.js +3 -6
  147. package/lib/MenuPopover/MenuPopoverTokens.d.ts +3 -7
  148. package/lib/MenuPopover/MenuPopoverTokens.d.ts.map +1 -1
  149. package/lib/MenuPopover/MenuPopoverTokens.js +2 -5
  150. package/lib/MenuPopover/MenuPopoverTokens.macos.d.ts +3 -7
  151. package/lib/MenuPopover/MenuPopoverTokens.macos.d.ts.map +1 -1
  152. package/lib/MenuPopover/MenuPopoverTokens.macos.js +7 -10
  153. package/lib/MenuPopover/MenuPopoverTokens.macos.js.map +1 -1
  154. package/lib/MenuPopover/index.d.ts +1 -1
  155. package/lib/MenuPopover/index.js +1 -1
  156. package/lib/MenuPopover/useMenuPopover.d.ts +2 -2
  157. package/lib/MenuPopover/useMenuPopover.js +79 -96
  158. package/lib/MenuPopover/useMenuPopover.js.map +1 -1
  159. package/lib/MenuTrigger/MenuTrigger.d.ts +3 -3
  160. package/lib/MenuTrigger/MenuTrigger.js +16 -16
  161. package/lib/MenuTrigger/MenuTrigger.types.d.ts +13 -13
  162. package/lib/MenuTrigger/MenuTrigger.types.js +1 -1
  163. package/lib/MenuTrigger/index.d.ts +1 -1
  164. package/lib/MenuTrigger/index.js +1 -1
  165. package/lib/MenuTrigger/useMenuTrigger.d.ts +1 -1
  166. package/lib/MenuTrigger/useMenuTrigger.js +70 -99
  167. package/lib/MenuTrigger/useMergeRefs.d.ts +1 -1
  168. package/lib/MenuTrigger/useMergeRefs.js +14 -16
  169. package/lib/__tests__/Menu.test.d.ts +1 -1
  170. package/lib/__tests__/Menu.test.js +122 -230
  171. package/lib/consts.d.ts +1 -1
  172. package/lib/consts.js +3 -3
  173. package/lib/context/index.d.ts +1 -1
  174. package/lib/context/index.js +1 -1
  175. package/lib/context/menuContext.d.ts +5 -5
  176. package/lib/context/menuContext.js +15 -15
  177. package/lib/context/menuListContext.d.ts +4 -4
  178. package/lib/context/menuListContext.js +12 -12
  179. package/lib/context/menuTriggerContext.d.ts +1 -1
  180. package/lib/context/menuTriggerContext.js +1 -1
  181. package/lib/index.d.ts +4 -26
  182. package/lib/index.js +2 -12
  183. package/lib-commonjs/Menu/Menu.d.ts +2 -2
  184. package/lib-commonjs/Menu/Menu.js +23 -25
  185. package/lib-commonjs/Menu/Menu.types.d.ts +47 -47
  186. package/lib-commonjs/Menu/Menu.types.js +6 -6
  187. package/lib-commonjs/Menu/index.d.ts +1 -1
  188. package/lib-commonjs/Menu/index.js +11 -31
  189. package/lib-commonjs/Menu/renderMenu.android.d.ts +2 -6
  190. package/lib-commonjs/Menu/renderMenu.android.js +14 -26
  191. package/lib-commonjs/Menu/renderMenu.d.ts +2 -6
  192. package/lib-commonjs/Menu/renderMenu.js +8 -11
  193. package/lib-commonjs/Menu/useMenu.android.d.ts +1 -1
  194. package/lib-commonjs/Menu/useMenu.android.js +280 -303
  195. package/lib-commonjs/Menu/useMenu.d.ts +1 -1
  196. package/lib-commonjs/Menu/useMenu.js +79 -86
  197. package/lib-commonjs/Menu/useMenuContextValue.d.ts +1 -1
  198. package/lib-commonjs/Menu/useMenuContextValue.js +10 -12
  199. package/lib-commonjs/MenuCallout/MenuCallout.android.d.ts +2 -2
  200. package/lib-commonjs/MenuCallout/MenuCallout.android.js +25 -48
  201. package/lib-commonjs/MenuCallout/MenuCallout.d.ts +2 -2
  202. package/lib-commonjs/MenuCallout/MenuCallout.js +12 -12
  203. package/lib-commonjs/MenuCallout/MenuCallout.types.d.ts +13 -13
  204. package/lib-commonjs/MenuCallout/MenuCallout.types.d.ts.map +1 -1
  205. package/lib-commonjs/MenuCallout/MenuCallout.types.js +3 -3
  206. package/lib-commonjs/MenuCallout/index.d.ts +1 -1
  207. package/lib-commonjs/MenuCallout/index.js +7 -17
  208. package/lib-commonjs/MenuDivider/MenuDivider.d.ts +2 -7
  209. package/lib-commonjs/MenuDivider/MenuDivider.js +19 -19
  210. package/lib-commonjs/MenuDivider/MenuDivider.styling.d.ts +1 -1
  211. package/lib-commonjs/MenuDivider/MenuDivider.styling.js +22 -25
  212. package/lib-commonjs/MenuDivider/MenuDivider.types.d.ts +12 -12
  213. package/lib-commonjs/MenuDivider/MenuDivider.types.js +3 -3
  214. package/lib-commonjs/MenuDivider/MenuDividerTokens.android.d.ts +1 -1
  215. package/lib-commonjs/MenuDivider/MenuDividerTokens.android.js +7 -7
  216. package/lib-commonjs/MenuDivider/MenuDividerTokens.d.ts +1 -1
  217. package/lib-commonjs/MenuDivider/MenuDividerTokens.js +7 -7
  218. package/lib-commonjs/MenuDivider/MenuDividerTokens.macos.d.ts +1 -1
  219. package/lib-commonjs/MenuDivider/MenuDividerTokens.macos.js +7 -7
  220. package/lib-commonjs/MenuDivider/MenuDividerTokens.win32.d.ts +1 -1
  221. package/lib-commonjs/MenuDivider/MenuDividerTokens.win32.js +7 -7
  222. package/lib-commonjs/MenuDivider/index.d.ts +1 -1
  223. package/lib-commonjs/MenuDivider/index.js +7 -17
  224. package/lib-commonjs/MenuGroup/MenuGroup.d.ts +2 -7
  225. package/lib-commonjs/MenuGroup/MenuGroup.js +62 -78
  226. package/lib-commonjs/MenuGroup/MenuGroup.types.d.ts +7 -7
  227. package/lib-commonjs/MenuGroup/MenuGroup.types.js +3 -3
  228. package/lib-commonjs/MenuGroup/index.d.ts +1 -1
  229. package/lib-commonjs/MenuGroup/index.js +7 -17
  230. package/lib-commonjs/MenuGroupHeader/MenuGroupHeader.d.ts +2 -7
  231. package/lib-commonjs/MenuGroupHeader/MenuGroupHeader.js +20 -20
  232. package/lib-commonjs/MenuGroupHeader/MenuGroupHeader.styling.d.ts +1 -1
  233. package/lib-commonjs/MenuGroupHeader/MenuGroupHeader.styling.js +19 -22
  234. package/lib-commonjs/MenuGroupHeader/MenuGroupHeader.types.d.ts +7 -7
  235. package/lib-commonjs/MenuGroupHeader/MenuGroupHeader.types.js +3 -3
  236. package/lib-commonjs/MenuGroupHeader/MenuGroupHeaderTokens.d.ts +1 -1
  237. package/lib-commonjs/MenuGroupHeader/MenuGroupHeaderTokens.js +10 -10
  238. package/lib-commonjs/MenuGroupHeader/MenuGroupHeaderTokens.macos.d.ts +1 -1
  239. package/lib-commonjs/MenuGroupHeader/MenuGroupHeaderTokens.macos.js +11 -11
  240. package/lib-commonjs/MenuGroupHeader/index.d.ts +1 -1
  241. package/lib-commonjs/MenuGroupHeader/index.js +7 -17
  242. package/lib-commonjs/MenuItem/MenuItem.d.ts +2 -7
  243. package/lib-commonjs/MenuItem/MenuItem.js +51 -73
  244. package/lib-commonjs/MenuItem/MenuItem.styling.d.ts +1 -1
  245. package/lib-commonjs/MenuItem/MenuItem.styling.js +59 -80
  246. package/lib-commonjs/MenuItem/MenuItem.types.d.ts +83 -83
  247. package/lib-commonjs/MenuItem/MenuItem.types.js +3 -3
  248. package/lib-commonjs/MenuItem/MenuItemTokens.android.d.ts +1 -1
  249. package/lib-commonjs/MenuItem/MenuItemTokens.android.js +20 -20
  250. package/lib-commonjs/MenuItem/MenuItemTokens.d.ts +1 -1
  251. package/lib-commonjs/MenuItem/MenuItemTokens.js +38 -38
  252. package/lib-commonjs/MenuItem/MenuItemTokens.macos.d.ts +1 -1
  253. package/lib-commonjs/MenuItem/MenuItemTokens.macos.js +37 -37
  254. package/lib-commonjs/MenuItem/MenuItemTokens.win32.d.ts +1 -1
  255. package/lib-commonjs/MenuItem/MenuItemTokens.win32.js +39 -39
  256. package/lib-commonjs/MenuItem/index.d.ts +1 -1
  257. package/lib-commonjs/MenuItem/index.js +9 -24
  258. package/lib-commonjs/MenuItem/useMenuItem.d.ts +1 -1
  259. package/lib-commonjs/MenuItem/useMenuItem.js +140 -169
  260. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts +3 -11
  261. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js +37 -65
  262. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.styling.d.ts +1 -1
  263. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.styling.js +69 -91
  264. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.types.d.ts +89 -90
  265. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.types.d.ts.map +1 -1
  266. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.types.js +3 -3
  267. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.android.d.ts +1 -1
  268. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.android.js +38 -38
  269. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.d.ts +1 -1
  270. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.js +47 -47
  271. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.macos.d.ts +1 -1
  272. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.macos.js +45 -45
  273. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.win32.d.ts +1 -1
  274. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.win32.js +48 -48
  275. package/lib-commonjs/MenuItemCheckbox/index.d.ts +2 -8
  276. package/lib-commonjs/MenuItemCheckbox/index.js +10 -30
  277. package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts +2 -5
  278. package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js +143 -185
  279. package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts +3 -11
  280. package/lib-commonjs/MenuItemRadio/MenuItemRadio.js +37 -65
  281. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.android.d.ts +1 -1
  282. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.android.js +67 -88
  283. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.d.ts +1 -1
  284. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.js +51 -69
  285. package/lib-commonjs/MenuItemRadio/MenuItemRadio.types.d.ts +120 -121
  286. package/lib-commonjs/MenuItemRadio/MenuItemRadio.types.d.ts.map +1 -1
  287. package/lib-commonjs/MenuItemRadio/MenuItemRadio.types.js +3 -3
  288. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.android.d.ts +1 -1
  289. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.android.js +41 -41
  290. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.d.ts +1 -1
  291. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.js +48 -48
  292. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.macos.d.ts +1 -1
  293. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.macos.js +46 -46
  294. package/lib-commonjs/MenuItemRadio/index.d.ts +2 -8
  295. package/lib-commonjs/MenuItemRadio/index.js +9 -24
  296. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts +1 -1
  297. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js +58 -78
  298. package/lib-commonjs/MenuList/MenuList.d.ts +2 -7
  299. package/lib-commonjs/MenuList/MenuList.js +69 -87
  300. package/lib-commonjs/MenuList/MenuList.styling.d.ts +1 -1
  301. package/lib-commonjs/MenuList/MenuList.styling.js +28 -34
  302. package/lib-commonjs/MenuList/MenuList.types.d.ts +72 -72
  303. package/lib-commonjs/MenuList/MenuList.types.js +3 -3
  304. package/lib-commonjs/MenuList/MenuListTokens.android.d.ts +1 -1
  305. package/lib-commonjs/MenuList/MenuListTokens.android.js +7 -7
  306. package/lib-commonjs/MenuList/MenuListTokens.d.ts +1 -1
  307. package/lib-commonjs/MenuList/MenuListTokens.js +9 -9
  308. package/lib-commonjs/MenuList/MenuListTokens.macos.d.ts +1 -1
  309. package/lib-commonjs/MenuList/MenuListTokens.macos.js +7 -7
  310. package/lib-commonjs/MenuList/MenuListTokens.win32.d.ts +1 -1
  311. package/lib-commonjs/MenuList/MenuListTokens.win32.js +12 -12
  312. package/lib-commonjs/MenuList/index.d.ts +1 -1
  313. package/lib-commonjs/MenuList/index.js +11 -31
  314. package/lib-commonjs/MenuList/useMenuList.d.ts +1 -1
  315. package/lib-commonjs/MenuList/useMenuList.js +151 -170
  316. package/lib-commonjs/MenuList/useMenuListContextValue.d.ts +1 -1
  317. package/lib-commonjs/MenuList/useMenuListContextValue.js +4 -4
  318. package/lib-commonjs/MenuPopover/MenuPopover.d.ts +3 -9
  319. package/lib-commonjs/MenuPopover/MenuPopover.d.ts.map +1 -1
  320. package/lib-commonjs/MenuPopover/MenuPopover.js +48 -50
  321. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts +14 -14
  322. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  323. package/lib-commonjs/MenuPopover/MenuPopover.types.js +3 -3
  324. package/lib-commonjs/MenuPopover/MenuPopoverTokens.android.d.ts +3 -7
  325. package/lib-commonjs/MenuPopover/MenuPopoverTokens.android.d.ts.map +1 -1
  326. package/lib-commonjs/MenuPopover/MenuPopoverTokens.android.js +9 -12
  327. package/lib-commonjs/MenuPopover/MenuPopoverTokens.d.ts +3 -7
  328. package/lib-commonjs/MenuPopover/MenuPopoverTokens.d.ts.map +1 -1
  329. package/lib-commonjs/MenuPopover/MenuPopoverTokens.js +6 -9
  330. package/lib-commonjs/MenuPopover/MenuPopoverTokens.macos.d.ts +3 -7
  331. package/lib-commonjs/MenuPopover/MenuPopoverTokens.macos.d.ts.map +1 -1
  332. package/lib-commonjs/MenuPopover/MenuPopoverTokens.macos.js +12 -15
  333. package/lib-commonjs/MenuPopover/MenuPopoverTokens.macos.js.map +1 -1
  334. package/lib-commonjs/MenuPopover/index.d.ts +1 -1
  335. package/lib-commonjs/MenuPopover/index.js +9 -24
  336. package/lib-commonjs/MenuPopover/useMenuPopover.d.ts +2 -2
  337. package/lib-commonjs/MenuPopover/useMenuPopover.js +87 -106
  338. package/lib-commonjs/MenuPopover/useMenuPopover.js.map +1 -1
  339. package/lib-commonjs/MenuTrigger/MenuTrigger.d.ts +3 -3
  340. package/lib-commonjs/MenuTrigger/MenuTrigger.js +52 -69
  341. package/lib-commonjs/MenuTrigger/MenuTrigger.types.d.ts +13 -13
  342. package/lib-commonjs/MenuTrigger/MenuTrigger.types.js +3 -3
  343. package/lib-commonjs/MenuTrigger/index.d.ts +1 -1
  344. package/lib-commonjs/MenuTrigger/index.js +9 -24
  345. package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts +1 -1
  346. package/lib-commonjs/MenuTrigger/useMenuTrigger.js +80 -111
  347. package/lib-commonjs/MenuTrigger/useMergeRefs.d.ts +1 -1
  348. package/lib-commonjs/MenuTrigger/useMergeRefs.js +46 -65
  349. package/lib-commonjs/__tests__/Menu.test.d.ts +1 -1
  350. package/lib-commonjs/__tests__/Menu.test.js +169 -333
  351. package/lib-commonjs/consts.d.ts +1 -1
  352. package/lib-commonjs/consts.js +6 -6
  353. package/lib-commonjs/context/index.d.ts +1 -1
  354. package/lib-commonjs/context/index.js +16 -70
  355. package/lib-commonjs/context/menuContext.d.ts +5 -5
  356. package/lib-commonjs/context/menuContext.js +47 -64
  357. package/lib-commonjs/context/menuListContext.d.ts +4 -4
  358. package/lib-commonjs/context/menuListContext.js +44 -61
  359. package/lib-commonjs/context/menuTriggerContext.d.ts +1 -1
  360. package/lib-commonjs/context/menuTriggerContext.js +7 -9
  361. package/lib-commonjs/index.d.ts +4 -26
  362. package/lib-commonjs/index.js +56 -296
  363. package/package.json +28 -27
  364. package/src/MenuCallout/MenuCallout.types.ts +12 -13
  365. package/src/MenuItemCheckbox/MenuItemCheckbox.types.ts +4 -2
  366. package/src/MenuItemRadio/MenuItemRadio.types.ts +4 -2
  367. package/src/MenuPopover/MenuPopover.types.ts +12 -13
  368. package/src/MenuPopover/MenuPopoverTokens.macos.ts +2 -2
  369. package/src/MenuPopover/useMenuPopover.ts +1 -1
@@ -16,214 +16,214 @@ const EASING = Easing.bezier(0.4, 0, 0.2, 1);
16
16
  // Screen indent is the fixed value according to Android guidelines which depicts the minimum distance from screen edge Menu should have
17
17
  const SCREEN_INDENT = 16;
18
18
  export const useMenu = (props) => {
19
- /**
20
- * State , Ref and Context Values for Menu Container and Anchor
21
- */
22
- const triggerRef = React.useRef(null);
23
- const context = useMenuContext();
24
- const isSubmenu = context.triggerRef !== null;
25
- const isOpenControlled = typeof props.open !== 'undefined';
26
- const _container = useRef(null);
27
- const [menuState, setMenuState] = React.useState(AndroidMenuStates.Hidden);
28
- /**
29
- * Call for useMenuCheckedState for identifying if any MenuItemCheckbox is checked or not
30
- */
31
- const [checked, onCheckedChange] = useMenuCheckedState(props);
32
- /**
33
- * State Variables related to Height,Width and Position of the Menu Popover
34
- */
35
- const [maxMenuHeight] = useState(250);
36
- const [anchorWidth, setAnchorWidth] = React.useState(0);
37
- const [left, setLeft] = React.useState(0);
38
- const [menuHeight, setMenuHeight] = React.useState(0);
39
- const [menuWidth, setMenuWidth] = React.useState(0);
40
- const [top, setTop] = React.useState(0);
41
- /**
42
- * Animation value for the Menu popover show,hide and opacity values
43
- */
44
- const [menuSizeAnimation, setMenuSizeAnimation] = React.useState(new Animated.ValueXY({ x: 0, y: 0 }));
45
- const [opacityAnimation, setOpacityAnimation] = React.useState(new Animated.Value(0));
46
- /**
47
- * RTL for the MenuItem needs to taken care as well.
48
- */
49
- const { isRTL } = I18nManager;
50
- /**
51
- * Calcualations related to Menu Popver position and dimensions
52
- */
53
- const dimensions = Dimensions.get('screen');
54
- const { width: windowWidth } = dimensions;
55
- const windowHeight = dimensions.height - (StatusBar.currentHeight || 0);
56
- const menuSize = {
57
- width: menuSizeAnimation.x,
58
- height: menuSizeAnimation.y,
59
- };
60
- /**
61
- * show function handles the opening of the Menu , it calcuates the position of the Anchor in the screen.
62
- * It also sets the Anchor width and change the state of the Popover
63
- */ /**
64
- * show function handles the opening of the Menu , it calcuates the position of the Anchor in the screen.
65
- * It also sets the Anchor width and change the state of the Popover
66
- */
67
- const show = React.useCallback(() => {
68
- _container.current?.measureInWindow((left, top, buttonWidth, buttonHeight) => {
69
- setAnchorWidth(buttonWidth);
70
- setLeft(left);
71
- setMenuState(AndroidMenuStates.Shown);
72
- setTop(top + buttonHeight);
73
- });
74
- }, []);
75
- /**
76
- * hide function handles the hiding of the Menu when user clicks on the scrim outside Menu or MenuItems such as (MenuItemRadio, MenuItem)
77
- */
78
- const hide = React.useCallback(() => {
79
- Animated.timing(opacityAnimation, {
80
- toValue: 0,
81
- duration: 250,
82
- easing: EASING,
83
- useNativeDriver: false,
84
- }).start(() => {
85
- // Reset state
86
- setMenuState(AndroidMenuStates.Hidden);
87
- setMenuSizeAnimation(new Animated.ValueXY({ x: 0, y: 0 }));
88
- setOpacityAnimation(new Animated.Value(0));
89
- });
90
- }, [opacityAnimation]);
91
- // Hook to maintain the state of the Menu for non controlled and controlled components.
92
- const [open, shouldFocusOnContainer, setOpen] = useMenuOpenState(isOpenControlled, props, context.setOpen, hide, show);
93
- /**
94
- * Checks the value of the open props and show the menu accordingly
95
- */
96
- useEffect(() => {
97
- if (props.open) {
98
- show();
99
- }
100
- }, [props.open, show]);
101
- /**
102
- * onMenuLayout handles the start of the Animation when anchor is clicked
103
- */
104
- const onMenuLayout = React.useCallback(
105
- (e) => {
106
- if (menuState === AndroidMenuStates.Animating) {
107
- return;
108
- }
109
- const { width, height } = e.nativeEvent.layout;
110
- setMenuHeight(height);
111
- setMenuWidth(width);
112
- setMenuState(AndroidMenuStates.Animating);
113
- Animated.parallel([
114
- Animated.timing(menuSizeAnimation, {
115
- toValue: { x: width, y: height },
116
- duration: 100,
117
- easing: EASING,
118
- useNativeDriver: false,
119
- }),
120
- Animated.timing(opacityAnimation, {
121
- toValue: 1,
122
- duration: 100,
123
- easing: EASING,
124
- useNativeDriver: false,
125
- }),
126
- ]).start();
127
- },
128
- [menuSizeAnimation, menuState, opacityAnimation],
129
- );
130
- /**
131
- * onRequestClose handles the closing of the Menu when the MenuItem or scrim or outside is clicked
132
- */
133
- const onRequestClose = (e) => {
134
- setOpen(e, false, false);
135
- };
136
- // Adjust position of menu - TODO: fix this warning removal, potentially adds extra re-renders
137
- const transforms = [];
138
- useMemo(() => {
139
19
  /**
140
- * If the Menu width and SCREEN_INDENT cross the screen width then the Menu will be adjusted to the oppostion left side of the screen
20
+ * State , Ref and Context Values for Menu Container and Anchor
21
+ */
22
+ const triggerRef = React.useRef(null);
23
+ const context = useMenuContext();
24
+ const isSubmenu = context.triggerRef !== null;
25
+ const isOpenControlled = typeof props.open !== 'undefined';
26
+ const _container = useRef(null);
27
+ const [menuState, setMenuState] = React.useState(AndroidMenuStates.Hidden);
28
+ /**
29
+ * Call for useMenuCheckedState for identifying if any MenuItemCheckbox is checked or not
30
+ */
31
+ const [checked, onCheckedChange] = useMenuCheckedState(props);
32
+ /**
33
+ * State Variables related to Height,Width and Position of the Menu Popover
34
+ */
35
+ const [maxMenuHeight] = useState(250);
36
+ const [anchorWidth, setAnchorWidth] = React.useState(0);
37
+ const [left, setLeft] = React.useState(0);
38
+ const [menuHeight, setMenuHeight] = React.useState(0);
39
+ const [menuWidth, setMenuWidth] = React.useState(0);
40
+ const [top, setTop] = React.useState(0);
41
+ /**
42
+ * Animation value for the Menu popover show,hide and opacity values
141
43
  */
142
- if ((isRTL && left + anchorWidth - menuWidth > SCREEN_INDENT) || (!isRTL && left + menuWidth > windowWidth - SCREEN_INDENT)) {
143
- transforms.push({
144
- translateX: Animated.multiply(menuSizeAnimation.x, -1),
145
- });
146
- } else if (left < SCREEN_INDENT) {
147
- // Setting the left podition of the Menu if the left positon is less than screen indent
148
- setLeft(SCREEN_INDENT);
149
- }
150
- // Flip by Y axis if menu hits bottom screen border
151
- if (top + menuHeight + SCREEN_INDENT > windowHeight) {
152
- if (menuHeight > maxMenuHeight) {
153
- transforms.push({
154
- translateY: Animated.multiply(menuSizeAnimation.y, -1),
44
+ const [menuSizeAnimation, setMenuSizeAnimation] = React.useState(new Animated.ValueXY({ x: 0, y: 0 }));
45
+ const [opacityAnimation, setOpacityAnimation] = React.useState(new Animated.Value(0));
46
+ /**
47
+ * RTL for the MenuItem needs to taken care as well.
48
+ */
49
+ const { isRTL } = I18nManager;
50
+ /**
51
+ * Calcualations related to Menu Popver position and dimensions
52
+ */
53
+ const dimensions = Dimensions.get('screen');
54
+ const { width: windowWidth } = dimensions;
55
+ const windowHeight = dimensions.height - (StatusBar.currentHeight || 0);
56
+ const menuSize = {
57
+ width: menuSizeAnimation.x,
58
+ height: menuSizeAnimation.y,
59
+ };
60
+ /**
61
+ * show function handles the opening of the Menu , it calcuates the position of the Anchor in the screen.
62
+ * It also sets the Anchor width and change the state of the Popover
63
+ */ /**
64
+ * show function handles the opening of the Menu , it calcuates the position of the Anchor in the screen.
65
+ * It also sets the Anchor width and change the state of the Popover
66
+ */
67
+ const show = React.useCallback(() => {
68
+ _container.current?.measureInWindow((left, top, buttonWidth, buttonHeight) => {
69
+ setAnchorWidth(buttonWidth);
70
+ setLeft(left);
71
+ setMenuState(AndroidMenuStates.Shown);
72
+ setTop(top + buttonHeight);
155
73
  });
156
- } else {
157
- transforms.push({
158
- translateY: Animated.multiply(menuSizeAnimation.y, -1),
74
+ }, []);
75
+ /**
76
+ * hide function handles the hiding of the Menu when user clicks on the scrim outside Menu or MenuItems such as (MenuItemRadio, MenuItem)
77
+ */
78
+ const hide = React.useCallback(() => {
79
+ Animated.timing(opacityAnimation, {
80
+ toValue: 0,
81
+ duration: 250,
82
+ easing: EASING,
83
+ useNativeDriver: false,
84
+ }).start(() => {
85
+ // Reset state
86
+ setMenuState(AndroidMenuStates.Hidden);
87
+ setMenuSizeAnimation(new Animated.ValueXY({ x: 0, y: 0 }));
88
+ setOpacityAnimation(new Animated.Value(0));
159
89
  });
160
- }
161
- } else if (top < SCREEN_INDENT) {
162
- setTop(SCREEN_INDENT);
163
- }
164
- }, [
165
- anchorWidth,
166
- isRTL,
167
- left,
168
- maxMenuHeight,
169
- menuHeight,
170
- menuSizeAnimation.x,
171
- menuSizeAnimation.y,
172
- menuWidth,
173
- top,
174
- transforms,
175
- windowHeight,
176
- windowWidth,
177
- ]);
178
- /**
179
- * Styles to be applied on the Modal Popover Animated.View
180
- */
181
- const shadowMenuContainerStyle = useMemo(() => {
90
+ }, [opacityAnimation]);
91
+ // Hook to maintain the state of the Menu for non controlled and controlled components.
92
+ const [open, shouldFocusOnContainer, setOpen] = useMenuOpenState(isOpenControlled, props, context.setOpen, hide, show);
93
+ /**
94
+ * Checks the value of the open props and show the menu accordingly
95
+ */
96
+ useEffect(() => {
97
+ if (props.open) {
98
+ show();
99
+ }
100
+ }, [props.open, show]);
101
+ /**
102
+ * onMenuLayout handles the start of the Animation when anchor is clicked
103
+ */
104
+ const onMenuLayout = React.useCallback((e) => {
105
+ if (menuState === AndroidMenuStates.Animating) {
106
+ return;
107
+ }
108
+ const { width, height } = e.nativeEvent.layout;
109
+ setMenuHeight(height);
110
+ setMenuWidth(width);
111
+ setMenuState(AndroidMenuStates.Animating);
112
+ Animated.parallel([
113
+ Animated.timing(menuSizeAnimation, {
114
+ toValue: { x: width, y: height },
115
+ duration: 100,
116
+ easing: EASING,
117
+ useNativeDriver: false,
118
+ }),
119
+ Animated.timing(opacityAnimation, {
120
+ toValue: 1,
121
+ duration: 100,
122
+ easing: EASING,
123
+ useNativeDriver: false,
124
+ }),
125
+ ]).start();
126
+ }, [menuSizeAnimation, menuState, opacityAnimation]);
127
+ /**
128
+ * onRequestClose handles the closing of the Menu when the MenuItem or scrim or outside is clicked
129
+ */
130
+ const onRequestClose = (e) => {
131
+ setOpen(e, false, false);
132
+ };
133
+ // Adjust position of menu - TODO: fix this warning removal, potentially adds extra re-renders
134
+ const transforms = [];
135
+ useMemo(() => {
136
+ /**
137
+ * If the Menu width and SCREEN_INDENT cross the screen width then the Menu will be adjusted to the oppostion left side of the screen
138
+ */
139
+ if ((isRTL && left + anchorWidth - menuWidth > SCREEN_INDENT) || (!isRTL && left + menuWidth > windowWidth - SCREEN_INDENT)) {
140
+ transforms.push({
141
+ translateX: Animated.multiply(menuSizeAnimation.x, -1),
142
+ });
143
+ }
144
+ else if (left < SCREEN_INDENT) {
145
+ // Setting the left podition of the Menu if the left positon is less than screen indent
146
+ setLeft(SCREEN_INDENT);
147
+ }
148
+ // Flip by Y axis if menu hits bottom screen border
149
+ if (top + menuHeight + SCREEN_INDENT > windowHeight) {
150
+ if (menuHeight > maxMenuHeight) {
151
+ transforms.push({
152
+ translateY: Animated.multiply(menuSizeAnimation.y, -1),
153
+ });
154
+ }
155
+ else {
156
+ transforms.push({
157
+ translateY: Animated.multiply(menuSizeAnimation.y, -1),
158
+ });
159
+ }
160
+ }
161
+ else if (top < SCREEN_INDENT) {
162
+ setTop(SCREEN_INDENT);
163
+ }
164
+ }, [
165
+ anchorWidth,
166
+ isRTL,
167
+ left,
168
+ maxMenuHeight,
169
+ menuHeight,
170
+ menuSizeAnimation.x,
171
+ menuSizeAnimation.y,
172
+ menuWidth,
173
+ top,
174
+ transforms,
175
+ windowHeight,
176
+ windowWidth,
177
+ ]);
178
+ /**
179
+ * Styles to be applied on the Modal Popover Animated.View
180
+ */
181
+ const shadowMenuContainerStyle = useMemo(() => {
182
+ return {
183
+ opacity: opacityAnimation,
184
+ transform: transforms,
185
+ top,
186
+ // Switch left to right for rtl devices
187
+ ...(isRTL ? { right: left } : { left }),
188
+ };
189
+ }, [isRTL, left, opacityAnimation, top, transforms]);
190
+ /**
191
+ * handles the state when menu is opening or closing with Animation
192
+ */
193
+ const animationStarted = menuState === AndroidMenuStates.Animating;
194
+ const { testID } = props;
195
+ // Default behavior for submenu is to open on hover
196
+ // the ...props line below will override this behavior for a submenu
197
+ // or apply openOnHover if passed into a root Menu.
198
+ const openOnHover = isSubmenu;
199
+ // We need to be able to cancel the timer that gets set on
200
+ // hover out of the parent popover if the parent popover
201
+ // is also set to open/close on hover out. Otherwise
202
+ // the parent menu will close when the timeout passes.
203
+ const parentPopoverHoverOutTimer = isSubmenu ? context.popoverHoverOutTimer : undefined;
182
204
  return {
183
- opacity: opacityAnimation,
184
- transform: transforms,
185
- top,
186
- // Switch left to right for rtl devices
187
- ...(isRTL ? { right: left } : { left }),
205
+ openOnHover,
206
+ ...props,
207
+ open,
208
+ setOpen,
209
+ shouldFocusOnContainer,
210
+ triggerRef,
211
+ isSubmenu,
212
+ isControlled: isOpenControlled,
213
+ parentPopoverHoverOutTimer,
214
+ setAnchorWidth,
215
+ shadowMenuContainerStyle,
216
+ _container,
217
+ onRequestClose,
218
+ onMenuLayout,
219
+ checked,
220
+ onCheckedChange,
221
+ menuHeight,
222
+ maxMenuHeight,
223
+ animationStarted,
224
+ menuSize,
225
+ testID,
188
226
  };
189
- }, [isRTL, left, opacityAnimation, top, transforms]);
190
- /**
191
- * handles the state when menu is opening or closing with Animation
192
- */
193
- const animationStarted = menuState === AndroidMenuStates.Animating;
194
- const { testID } = props;
195
- // Default behavior for submenu is to open on hover
196
- // the ...props line below will override this behavior for a submenu
197
- // or apply openOnHover if passed into a root Menu.
198
- const openOnHover = isSubmenu;
199
- // We need to be able to cancel the timer that gets set on
200
- // hover out of the parent popover if the parent popover
201
- // is also set to open/close on hover out. Otherwise
202
- // the parent menu will close when the timeout passes.
203
- const parentPopoverHoverOutTimer = isSubmenu ? context.popoverHoverOutTimer : undefined;
204
- return {
205
- openOnHover,
206
- ...props,
207
- open,
208
- setOpen,
209
- shouldFocusOnContainer,
210
- triggerRef,
211
- isSubmenu,
212
- isControlled: isOpenControlled,
213
- parentPopoverHoverOutTimer,
214
- setAnchorWidth,
215
- shadowMenuContainerStyle,
216
- _container,
217
- onRequestClose,
218
- onMenuLayout,
219
- checked,
220
- onCheckedChange,
221
- menuHeight,
222
- maxMenuHeight,
223
- animationStarted,
224
- menuSize,
225
- testID,
226
- };
227
227
  };
228
228
  /**
229
229
  * useMenuOpenState handles the open and closing of the Menu based on the click
@@ -231,58 +231,52 @@ export const useMenu = (props) => {
231
231
  *
232
232
  */
233
233
  const useMenuOpenState = (isControlled, props, parentSetOpen, hide, show) => {
234
- const { defaultOpen, onOpenChange, open } = props;
235
- const initialState = typeof defaultOpen !== 'undefined' ? defaultOpen : !!open;
236
- const [openInternal, setOpenInternal] = React.useState(initialState);
237
- const [shouldFocusOnContainer, setShouldFocusOnContainer] = React.useState(undefined);
238
- const state = isControlled ? open : openInternal;
239
- const lastCloseTimestampRef = React.useRef(-1);
240
- /**
241
- * setOpen handles the open of the Menu and setting focus on the Popover container
242
- */
243
- const setOpen = React.useCallback(
244
- (e, isOpen, bubble) => {
245
- const openPrev = state;
246
- if (!isControlled && (!isOpen || lastCloseTimestampRef.current + delayOpen <= Date.now())) {
247
- setOpenInternal(isOpen);
248
- }
249
- if (isOpen) {
250
- show();
251
- setShouldFocusOnContainer(true);
252
- }
253
- if (!isOpen) {
254
- setShouldFocusOnContainer(undefined);
255
- lastCloseTimestampRef.current = Date.now();
256
- hide();
257
- }
258
- if (onOpenChange && openPrev !== isOpen) {
259
- onOpenChange(e, isOpen);
260
- }
261
- if (bubble && parentSetOpen && !isControlled) {
262
- parentSetOpen(e, isOpen, bubble);
263
- }
264
- },
265
- [state, onOpenChange, parentSetOpen, show, hide],
266
- );
267
- return [state, shouldFocusOnContainer, setOpen];
234
+ const { defaultOpen, onOpenChange, open } = props;
235
+ const initialState = typeof defaultOpen !== 'undefined' ? defaultOpen : !!open;
236
+ const [openInternal, setOpenInternal] = React.useState(initialState);
237
+ const [shouldFocusOnContainer, setShouldFocusOnContainer] = React.useState(undefined);
238
+ const state = isControlled ? open : openInternal;
239
+ const lastCloseTimestampRef = React.useRef(-1);
240
+ /**
241
+ * setOpen handles the open of the Menu and setting focus on the Popover container
242
+ */
243
+ const setOpen = React.useCallback((e, isOpen, bubble) => {
244
+ const openPrev = state;
245
+ if (!isControlled && (!isOpen || lastCloseTimestampRef.current + delayOpen <= Date.now())) {
246
+ setOpenInternal(isOpen);
247
+ }
248
+ if (isOpen) {
249
+ show();
250
+ setShouldFocusOnContainer(true);
251
+ }
252
+ if (!isOpen) {
253
+ setShouldFocusOnContainer(undefined);
254
+ lastCloseTimestampRef.current = Date.now();
255
+ hide();
256
+ }
257
+ if (onOpenChange && openPrev !== isOpen) {
258
+ onOpenChange(e, isOpen);
259
+ }
260
+ if (bubble && parentSetOpen && !isControlled) {
261
+ parentSetOpen(e, isOpen, bubble);
262
+ }
263
+ }, [state, onOpenChange, parentSetOpen, show, hide]);
264
+ return [state, shouldFocusOnContainer, setOpen];
268
265
  };
269
266
  /**
270
267
  * Call for useMenuCheckedState for identifying if any MenuItemCheckbox is checked or not
271
268
  */
272
269
  const useMenuCheckedState = (props) => {
273
- const { checked, defaultChecked, onCheckedChange: onCheckedChangeOriginal } = props;
274
- const [checkedInternal, setCheckedInternal] = React.useState(defaultChecked ?? checked ?? []);
275
- const isControlled = typeof checked !== 'undefined';
276
- const state = isControlled ? checked : checkedInternal;
277
- const onCheckedChange = React.useCallback(
278
- (e, checked) => {
279
- if (!isControlled) {
280
- setCheckedInternal(checked);
281
- }
282
- onCheckedChangeOriginal?.(e, checked);
283
- },
284
- [isControlled, setCheckedInternal, onCheckedChangeOriginal],
285
- );
286
- return [state, onCheckedChange];
270
+ const { checked, defaultChecked, onCheckedChange: onCheckedChangeOriginal } = props;
271
+ const [checkedInternal, setCheckedInternal] = React.useState(defaultChecked ?? checked ?? []);
272
+ const isControlled = typeof checked !== 'undefined';
273
+ const state = isControlled ? checked : checkedInternal;
274
+ const onCheckedChange = React.useCallback((e, checked) => {
275
+ if (!isControlled) {
276
+ setCheckedInternal(checked);
277
+ }
278
+ onCheckedChangeOriginal?.(e, checked);
279
+ }, [isControlled, setCheckedInternal, onCheckedChangeOriginal]);
280
+ return [state, onCheckedChange];
287
281
  };
288
- //# sourceMappingURL=useMenu.android.js.map
282
+ //# sourceMappingURL=useMenu.android.js.map
@@ -1,3 +1,3 @@
1
1
  import type { MenuProps, MenuState } from './Menu.types';
2
2
  export declare const useMenu: (props: MenuProps) => MenuState;
3
- //# sourceMappingURL=useMenu.d.ts.map
3
+ //# sourceMappingURL=useMenu.d.ts.map